listView项目上的多个ToggleButton。点击一个,其他人打开/关闭

时间:2011-12-07 03:04:25

标签: android adapter togglebutton

我有一个包含多个ToggleButton项目的列表视图。当我点击一个时,另一个打开/关闭。但是,它执行与右侧ListView项相关的操作。

它们是在自定义适配器中管理的,我这是我的代码:

public class AdapterContacts extends BaseAdapter implements OnClickListener {

ToggleButton btnIsSending;
     .
     .
     .

   public View getView(int position, View convertView, ViewGroup viewGroup) {
    Contact entry = contactsList.get(position);
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.contact_row, null);
    }
     .
     .
     .
   // isSending button
    btnIsSending = (ToggleButton) convertView.findViewById(R.id.btnIsSending);
    btnIsSending.setFocusableInTouchMode(false);
    btnIsSending.setFocusable(false);
    btnIsSending.setOnClickListener(this);
    btnIsSending.setTag(entry);

    return convertView;
}

    public void onClick(View view) {
    final Contact entry = (Contact) view.getTag();
    Log.d(TAG, "entry " + entry.getPhoneNr());

    LookalizeData lookData = (LookalizeApp.getContext()).lookalizeData;
    // Toggle send button
    if( view.getId() == btnIsSending.getId()){
        if(btnIsSending.isChecked())
             ...
        else
                     ... 
      }       

还有其他按钮,它们可以正常工作。

分享的想法或经验?

1 个答案:

答案 0 :(得分:3)

在你的getView中你需要这样的东西(这段代码可以让你知道它在你的情况下是如何工作的):

ListView lv = ((ListActivity)context).getListView();
// Containing all check states
SparseBooleanArray sba = lv.getCheckedItemPositions();

btnIsSending = (ToggleButton) convertView.findViewById(R.id.btnIsSending);
btnIsSending.setFocusableInTouchMode(false);
btnIsSending.setFocusable(false);
btnIsSending.setTag(entry);

btnIsSending.setChecked(false);

// Cursor is passed as an argument.
if(sba != null)
  if(sba.get(cursor.getPosition()))
     btnIsSending.setChecked(true);

这就是活动方面你需要的。

你已经通过android:在xml中使用selectMode或使用setChoiceMode将ListView设置为多选模式。

您必须删除按钮上的onClick侦听器。无论您在onClick按钮中执行什么操作,都必须将该逻辑添加到onListItemClick的{​​{1}}。