Android, как перерисовать список, когда пользователь устанавливает флажок? - PullRequest
1 голос
/ 30 ноября 2011

У меня есть представление списка, и каждая строка содержит два просмотра текста и флажок.Мне нужно, чтобы пользователь установил только один из флажков, и если пользователь устанавливает другой флажок, предыдущий флажок должен быть снят, а второй можно установить.

Я могу создать список, но я не знаю, почему метод onListItemClick() делаетне работа?поэтому я не знаю, какой флажок установлен.

и мой следующий вопрос: как я могу перерисовать список после того, как пользователь установил флажок?

мой код:

    package com.Infindo.DRM;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

public class Infindo_PackageActivity extends ListActivity {

    private final String[] titels = {"Try before buy", "Pay per play", "Pay per day", "Pay per week", "Pay per month", "Daily subscription", "Weekly subscription", "Monthly subscription"};
    private final String[] descriptions = {"Free of charge", "Price: $1.00", "Price: $5.00", "Price: $10.00", "Price: $30.00", "Price: $5.00", "Price: $10.00", "Price: $30.00"};
    private String[] flag = {"false", "false", "false", "false", "false", "false", "false", "false"};
    private ListAdapter listAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.infindo_packagepage);

        listAdapter = new ListAdapter(this);
        setListAdapter(listAdapter);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Log.i("List Clicked:", "******");
    }

    public void onCheckboxClicked(View v){
        int i = getSelectedItemPosition();
        Log.i("item pos:", String.valueOf(i)); // every time the result is -1???
    }


    //*********************
    //  RowModel Class
    //*********************
    private class RowModel{
        TextView title;
        TextView description;
        CheckBox checkbox;
    }

    //*********************
    //  ListAdapter Class
    //*********************
    private class ListAdapter extends ArrayAdapter<String>{

        public ListAdapter(Context c) {
            super(c, R.layout.infindo_listformat, titels);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            RowModel holder;
            View row = convertView;

            if(row == null){
                LayoutInflater inflater = getLayoutInflater();
                row = inflater.inflate(R.layout.infindo_listformat, parent, false);

                holder = new RowModel();
                holder.title = (TextView) row.findViewById(R.id.title);
                holder.description = (TextView) row.findViewById(R.id.description); 
                holder.checkbox = (CheckBox) row.findViewById(R.id.checkbox);

                row.setTag(holder);

            } else {
                holder = (RowModel) row.getTag(); 
            }

            holder.title.setText(titels[position]);
            holder.description.setText(descriptions[position]);
            String s = flag[position];
            if(s.equalsIgnoreCase("false")) 
                holder.checkbox.setChecked(false);
            else
                holder.checkbox.setChecked(true);

            return(row);
        }
    }
}

Обновление: Я добавил

@Override
        public void notifyDataSetChanged() {
            super.notifyDataSetChanged();
            Log.i("List Redrawed:", "**notifyDataSetChanged()**");
        }

в свой класс List Adapter и назвал его в

public void onCheckboxClicked(View v){
        int i = getSelectedItemPosition();
        Log.i("item pos:", String.valueOf(i)); // every time the result is -1???
        listAdapter.notifyDataSetChanged();
    }

Я думаю, что проблема перерисовки решена,но я до сих пор не знаю, какой флажок установлен пользователем для изменения массива флагов.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Вы можете использовать setOnCheckedChangeListener, чтобы узнать, какой флажок был выбран. Вы можете посмотреть полный пример ListView с CheckBox здесь .

UPDATE

Чтобы ваша onListItemClick() работала, вам нужно написать android:focusable="false" для других элементов ListView, поскольку из-за фокуса других представлений ListView onListItemClick() не выполняет то, что он должен выполнять.

Извлеките этот ответ, почему Пользовательский список пользователей Android не может нажимать на элементы

0 голосов
/ 30 ноября 2011

Вам, вероятно, нужно обрабатывать щелчок из самого флажка, а не только из списка.

...