Как да запазите състоянието на бутона за превключване в изглед на списък в 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 Pattern по правилния начин.

Вижте следния урок за прилагане на метода 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