如何在android中的listview中保留切换按钮的状态

时间:2015-02-23 06:08:08

标签: android listview state togglebutton

我有listview with toggle button.i当我向下滚动切换按钮时切换按钮的状态发生变化时出现问题,当我点击第一个toggleButton时,第四个切换按钮也会被检查。我还想保存所有切换按钮状态和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;

    }
    }

1 个答案:

答案 0 :(得分:0)

  

当我向下滚动切换按钮时,切换按钮的状态   改变

因为当前的getView方法没有以正确的方式使用ViewHolder模式实现。

请参阅以下教程,使用getView实现ViewHolder方法:

Performance Tips for Android’s ListView

  

当我点击第一个toggleButton时,第四个切换按钮也是   检查

因为holder.tgbtn的{​​{1}}对象用于ToggleButton上ToggeleButton的检查状态。 onClick保留在上次调用holder.tgbtn方法时分配的引用。

使用getView根据v

从TextView获取文本
ToggelButton