Как сохранить состояние кнопки переключения в списке в Android

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

Я пытаюсь использовать держатель, но это не работает.

ниже мой код

    public class CustomUsersAdapter extends ArrayAdapter<User> {
        public CustomUsersAdapter(Context context, ArrayList<User> users) {
            super(context, 0, users);
        }

   @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
    //Get an instance of our cell holder                                                                         
        final Holder holder;

        holder = new Holder();

      // Get the data item for this position
      User user = getItem(position);    
         // Check if an existing view is being reused, otherwise inflate the view
    if (convertView == null) {
       convertView = LayoutInflater.from(getContext()).inflate(R.layout.activity_main, parent, false);
    }
    // Lookup view for data population
    holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
    holder.tvHome = (TextView) convertView.findViewById(R.id.tvHometown);
    //final ToggleButton tgbtn = (ToggleButton) convertView.findViewById(R.id.toggleButton1);
    // Populate the data into the template view using the data object
    holder.tvName.setText(user.name);
    holder.tvHome.setText(user.hometown);
  //  holder.tgbtn.setTag(position);
    /** The clicked Item in the ListView */
   RelativeLayout rLayout = (RelativeLayout) convertView;

    /** Getting the toggle button corresponding to the clicked item */
 holder.tgbtn = (ToggleButton) rLayout.getChildAt(2);


  holder.tgbtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             if (holder.tgbtn.isChecked()) {
                 holder.tgbtn.setChecked(true);
                 String homet=holder.tvHome.getText().toString();
                    Toast.makeText(getContext(),homet+"Blocked", Toast.LENGTH_SHORT).show();
                } else {
                    holder.tgbtn.setChecked(false);
                    Toast.makeText(getContext(), "Unblocked", Toast.LENGTH_SHORT).show();
                }
        }
        });


     // Return the completed view to render on screen
      return convertView;
        }


   private class Holder{

   TextView tvName;
   TextView tvHome;

   ToggleButton tgbtn,tg1;

    }
    }

person Simran    schedule 23.02.2015    source источник


Ответы (1)


когда я прокручиваю кнопку переключения вниз, состояние кнопки переключения изменилось

Потому что в настоящее время метод getView не реализован с использованием шаблона ViewHolder должным образом.

См. следующий учебник для реализации метода getView с использованием ViewHolder :

Советы по повышению производительности ListView в Android

когда я нажимаю на первый переключатель, четвертый переключатель также проверяется

Поскольку holder.tgbtn объект ToggleButton используется для проверки состояния ToggeleButton на onClick. holder.tgbtn хранит ссылку, назначенную при последнем вызове метода getView.

Используйте v для получения текста из TextView в соответствии с ToggelButton:

@Override
  public void onClick(View v) {
   // TODO Auto-generated method stub
   ViewGroup parent = (ViewGroup) v.getParent();
   TextView tvName = (TextView) parent.findViewById(R.id.tvName);
   //   Use  tvName to get TextView text 
  }
person ρяσѕρєя K    schedule 23.02.2015