Android список просмотра с флажком

1

В моем случае у меня есть два текстовых вида и один флажок в списке. Я использую класс ArrayAdapter для установки данных в текстовых просмотров.

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

public class Contacts_NumberActivity extends Activity {
    /** Called when the activity is first created. */
    String nameList[] = { "U", "A", "B", "C", "D", "E", "F", "G", "H",
            "I", "J", "L", "M", "N", "O", "P", "Q" }, numberList[] = { "1",
            "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4",
            "5", "6", "7" };
    ListView contactList;
    boolean[] checked;
    ContactHolder holder = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        contactList = (ListView) findViewById(R.id.contact_list);

        contactList.setAdapter(new ContactAdapter(this, R.layout.list_item,
                nameList, numberList));

    }

    public class ContactAdapter extends ArrayAdapter<String> {

        Context context;
        int layoutResourceId;
        String data[] = null;
        String data1[] = null;

        public ContactAdapter(Context context, int layoutResourceId,
                String[] data, String[] data1) {
            super(context, layoutResourceId, data);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.data = data;
            this.data1 = data1;
        }

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

            if (row == null) {
                LayoutInflater inflater = ((Activity) context)
                        .getLayoutInflater();
                row = inflater.inflate(layoutResourceId, parent, false);

                holder = new ContactHolder();
                holder.name = (TextView) row.findViewById(R.id.name);
                holder.number = (TextView) row.findViewById(R.id.number);
                holder.chkbox = (CheckBox) row.findViewById(R.id.checkBox1);

                holder.chkbox
                        .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                            @Override
                            public void onCheckedChanged(
                                    CompoundButton buttonView, boolean isChecked) {

                                holder.chkbox.setChecked(isChecked);
                                System.out.println("Checked possition= "
                                        + isChecked);
                            }

                        });

                row.setTag(holder);
            } else {
                holder = (ContactHolder) row.getTag();
            }

            holder.name.setText(data[position]);
            holder.number.setText(data1[position]);

            return row;
        }

        public class ContactHolder {
            TextView name, number;
            CheckBox chkbox;
        }
    }
}
  • 0
    См. Этот Link.it может быть полезным .. vogella.de/articles/AndroidListView/article.html
  • 0
    Я предполагаю, что проблема с печатью вашего listview.пожалуйста, проверьте ваш listview, он может иметь повтор данных, поэтому вы чувствуете, как автоматически checkbox становится selected.check и дайте мне знать, что
Показать ещё 2 комментария
Теги:

1 ответ

0

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

чтобы получить разрешение от этого, вы должны использовать макет вместо представления списка с помощью адаптера, здесь подсказка может помочь вам

LinearLayout parent = new LinearLayout(this);
parent.setOrientation(VERTICAL);
parent.setLayoutParams(new LayoutParams(list_width,list_height);

for(number of rows in your list)
{
LinearLayout row= new LinearLayout(this);
row.setOrientation(Horizontal);
row.setLayoutParams(new LayoutParams(row_width,row_height);

TextView text= new TextView (this);
text.setText("your text");
text.setLayoutParams(new LayoutParams(text_width,text_height);
row.addView(text);
.
.//other view you want to add as check box etc
.
.
parent.AddView(row);
}

this.addView(parent);

hope this will help you

примечание: но в случае, если у вас большое количество строк, это может вызвать проблемы с памятью

Ещё вопросы

Сообщество Overcoder
Наверх
Меню