2015-02-23 37 views
0

我有列表视图切换按钮。当我检查第一个切换按钮第五切换按钮会自动检查。当我检查第二切换按钮第七切换按钮得到检查。并且当我取消选中第五切换按钮时,它是空值烤面包。当我检查一个切换按钮第五切换按钮会自动检查在Android的列表视图

下面是我的代码

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                   
    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); 
     holder.tgbtn = (ToggleButton) convertView.findViewById(R.id.toggleButton1); 


     convertView.setTag(holder); //Add this 
    } 
    else 
    { 

     holder= (Holder) convertView.getTag(); 
    } 

    holder.tvName.setText(user.name); 
    holder.tvHome.setText(user.hometown); 

    /** The clicked Item in the ListView */ 
    RelativeLayout rLayout = (RelativeLayout) convertView; 

    /** Getting the toggle button corresponding to the clicked item */ 

    final ToggleButton tbt = (ToggleButton) rLayout.getChildAt(2); 

    tbt.setOnClickListener(new OnClickListener() { 
     String homet; 
     @Override 
     public void onClick(View v) { 

      // TODO Auto-generated method stub 
      if (tbt.isChecked()) { 
       //tbt.setChecked(true); 
       ViewGroup parent = (ViewGroup) v.getParent(); 
       TextView tvName = (TextView) parent.findViewById(R.id.tvName); 
       homet=tvName.getText().toString(); 

        Toast.makeText(getContext(),homet+"Blocked", Toast.LENGTH_SHORT).show(); 
       } else { 
        tbt.setChecked(false); 
        Toast.makeText(getContext(),homet+ "Unblocked", Toast.LENGTH_SHORT).show(); 
       } 
     } 
     }); 

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

     } 
      //this holder class will be filled from the layout xml and attached to the row as a tag object 


    private class Holder 
    { 
     TextView tvName; 
     TextView tvHome; 
     ToggleButton tgbtn,tg1; 
    } 
} 

请帮我...

以及如何保存所有的切换按钮的状态,这样我可以使用的保存状态保存切换的状态按钮,当应用程序重新打开。

回答

0

由于ListView回收机制,您的问题正在发生。 ListView回收其子行。为了更好的理解,看看here
至于解决你的问题,很多人已经问过这个问题。我能找到的最好的博客是this。你也可能想检查thisthis

+0

thanx为您的答复。我了解回收机制,但没有得到任何解决方案,以避免这种情况,如果我有一个togglebutton,如果我检查它在位置0(让item1也有一个togglebutton和ichecked它),所以当我向下滚动时,我会见第8项togglebutton已被选中 – Simran 2015-02-24 06:22:08