Флажок не установлен, когда я просматриваю список на Android

Я новичок в разработке Android. Я создал список с textbox и checkbox .

Когда я устанавливаю checkbox и прокручиваю его, чтобы проверить некоторые другие элементы в представлении списка, более старые не отмечены.

Как избежать этой проблемы в listview ? Прочтите мне мой код.

Вот код:

main.xml:

     

Это страница XML, которую я использовал для создания динамической строки списка:

listview.xml:

        

Это мой class активности.

CustomListViewActivity.java:

 public class CustomListViewActivity extends Activity { ListView lstView; static Context mContext; Button btnSave; private static class EfficientAdapter extends BaseAdapter { private LayoutInflater mInflater; public EfficientAdapter(Context context) { mInflater = LayoutInflater.from(context); } public int getCount() { return country.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.listview, parent, false); holder = new ViewHolder(); holder.text = (TextView) convertView .findViewById(R.id.TextView01); holder.text2 = (TextView) convertView .findViewById(R.id.TextView02); holder.txt = (EditText) convertView.findViewById(R.id.txtbox); holder.cbox = (CheckBox) convertView.findViewById(R.id.chkbox1); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(curr[position]); holder.text2.setText(country[position]); holder.txt.setText(""); holder.cbox.setChecked(false); return convertView; } public class ViewHolder { TextView text; TextView text2; EditText txt; CheckBox cbox; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lstView = (ListView) findViewById(R.id.ListView01); lstView.setAdapter(new EfficientAdapter(this)); btnSave = (Button)findViewById(R.id.btnSave); mContext = this; btnSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // I want to print the text which is in the listview one by one. // Later I will insert it in the database. // // Toast.makeText(getBaseContext(), "EditText Value, checkbox value and other values", Toast.LENGTH_SHORT).show(); for (int i = 0; i < lstView.getCount(); i++) { View listOrderView; listOrderView = lstView.getChildAt(i); try{ EditText txtAmt = (EditText)listOrderView.findViewById(R.id.txtbox); CheckBox cbValue = (CheckBox)listOrderView.findViewById(R.id.chkbox1); if(cbValue.isChecked()== true){ String amt = txtAmt.getText().toString(); Toast.makeText(getBaseContext(), "Amount is :"+amt, Toast.LENGTH_SHORT).show(); } } catch (Exception e) { // TODO: handle exception } } } }); } private static final String[] country = { "item1", "item2", "item3", "item4", "item5", "item6","item7", "item8", "item9", "item10", "item11", "item12" }; private static final String[] curr = { "1", "2", "3", "4", "5", "6","7", "8", "9", "10", "11", "12" }; } 

Пожалуйста, помогите мне решить эту проблему.

Я упоминал эту проблему во многих местах. Но я не мог правильно ответить на эту проблему.

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

7 Solutions collect form web for “Флажок не установлен, когда я просматриваю список на Android”

В пользовательском запросе адаптера listview setChecked после вызова setOnCheckedChangeListener .

Таким образом, вы разорвете ссылку на старого слушателя из переработанного представления.

Вы можете использовать следующий код адаптера для правильной установки флажка в ListView.

Подробное демо здесь: Listview With Checkbox Android

См. Подробную демонстрационную ссылку для глубокой информации. Он также показывает, как отправить проверенную информацию на следующую операцию.

 import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; public class CustomAdapter extends BaseAdapter { private Context context; public static ArrayList modelArrayList; public CustomAdapter(Context context, ArrayList modelArrayList) { this.context = context; this.modelArrayList = modelArrayList; } @Override public int getViewTypeCount() { return getCount(); } @Override public int getItemViewType(int position) { return position; } @Override public int getCount() { return modelArrayList.size(); } @Override public Object getItem(int position) { return modelArrayList.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.lv_item, null, true); holder.checkBox = (CheckBox) convertView.findViewById(R.id.cb); holder.tvAnimal = (TextView) convertView.findViewById(R.id.animal); convertView.setTag(holder); } else { // The getTag returns the viewHolder object set as a tag to the view holder = (ViewHolder)convertView.getTag(); } holder.checkBox.setText("Checkbox " + position); holder.tvAnimal.setText(modelArrayList.get(position).getAnimal()); holder.checkBox.setChecked(modelArrayList.get(position).getSelected()); holder.checkBox.setTag(R.integer.btnplusview, convertView); holder.checkBox.setTag( position); holder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View tempview = (View) holder.checkBox.getTag(R.integer.btnplusview); TextView tv = (TextView) tempview.findViewById(R.id.animal); Integer pos = (Integer) holder.checkBox.getTag(); Toast.makeText(context, "Checkbox " + pos + " clicked!", Toast.LENGTH_SHORT).show(); if (modelArrayList.get(pos).getSelected()){ modelArrayList.get(pos).setSelected(false); } else { modelArrayList.get(pos).setSelected(true); } } }); return convertView; } private class ViewHolder { protected CheckBox checkBox; private TextView tvAnimal; } } 

Model

 public class Model { private boolean isSelected; private String animal; public String getAnimal() { return animal; } public void setAnimal(String animal) { this.animal = animal; } public boolean getSelected() { return isSelected; } public void setSelected(boolean selected) { isSelected = selected; } } 

В вашем getView() вас есть следующая строка

 holder.cbox.setChecked(false); 

который устанавливает CheckBox без getView() каждый раз, когда getView() (например, при прокрутке списка)

Blockquote

** В Side getView () Метод просто назовите это >>

 check.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton arg0, boolean arg1) { if(check.isChecked()) { //checked chkArray[position]=true; } else { //uncheck chkArray[position]=false; } } }); //check condition for checkboxes if(chkArray.length>0) { for (int i = 0; i < chkArray.length; i++) { if(chkArray[position]!=null && chkArray[position]) { check.setChecked(true); } } } 

Рассматривать:

 holder.cbox.setChecked(false); 

Удалите эту строку. Когда вы каждый раз прокручиваете представление списка, вызывается метод getView ().

Когда мы просматриваем элементы в списке, он восстанавливает значение из адаптера. Вот почему флажок снят. Но если мы обновим адаптер с последним значением, он останется включенным. Для этого вам нужно использовать setOnClickListener ().

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

У меня также была проблема. Android делает это, чтобы сэкономить место; загружаются только те предметы, которые вы сейчас видите, и это то, что я узнал.

Если вы находитесь внизу в своем списке, идентификатор 1 находится, возможно, на позиции 5. Я искал в Интернете и узнал об этом раньше.

Но это поможет вам: D

  • Вызов метода активности из адаптера
  • указатель указателя в связанном списке добавить
  • Как я могу использовать автоматическую прокрутку ListBox при добавлении нового элемента?
  • Android: пользовательский разделитель (или даже элемент) в ListView, зависящий от содержимого элемента
  • Прокрутите список в WPF в определенную строку
  • WPF ListView Неактивный цвет выделения
  • Как удалить элемент из списка?
  • Как инициализировать List для заданного размера (в отличие от емкости)?
  • Найдите пересечение двух вложенных списков?
  • Изменение списка с использованием нотации среза
  • Что именно делает метод .join ()?
  • Interesting Posts

    Как запретить людям выполнять XSS в Spring MVC?

    Порядок выполнения в списке инициализации конструктора

    Ява; String заменить (используя регулярные выражения)?

    inline условные выражения в angular.js

    Как получить время выполнения Bash в миллисекундах в Mac OS X?

    Моя веб-камера просто появилась на «черном фоне»

    Расчет времени с использованием t-sql

    Как сохранить историю оболочки из emacs и использовать ее в терминале?

    Сделайте ссылку средней ссылки открытой на новой вкладке прямо справа от вкладки, содержащей ссылку

    Как заставить applescript работать с Preview в Snow Leopard?

    Как настроить class в Netbeans?

    Переименование столбцов результатов из агрегации Pandas («FutureWarning: использование dict с переименованием устарело»)

    Добавить файлы CSS или JavaScript в макет из представлений или частичных представлений

    Зачем нужны блокировки записи, когда есть mount с только для чтения?

    Как сохранить версию для печати в формате HTML?

    Давайте будем гением компьютера.