我有一个包含多个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
...
}
还有其他按钮,它们可以正常工作。
分享的想法或经验?
答案 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}}。