我有这个用于列表视图的 xml 代码:
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/searchView"
android:background="@drawable/list_selector"
android:choiceMode="singleChoice" />
这是list_selector
可绘制的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_shortAnimTime">
<item android:drawable="@drawable/button_pressed" android:state_activated="true"/>
</selector>
list_view 的每个项目都有一个 checkedTextView,如下所示:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/checkList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center_vertical"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/white"
android:paddingLeft="6dip" />
这个设置有两个问题。
1.) 我可以选中每个项目旁边的框,但我不能取消选中它。2.)在我实现复选框之前,列表选择器在您选择它时会使项目变蓝,现在当您选择项目时,list_selector 不做任何事情,只有复选框被勾选。
那么有没有办法解决 1. 并做到这一点,我必须点击复选框来勾选/取消勾选它,当我点击 listview 项目中的其他任何地方时,list_selector 会起作用?
编辑:我的自定义适配器:另外,我已经解决了标记/取消标记。有用。现在唯一的问题是2。)如上!
public class ContactsAdapter extends BaseAdapter {
private List<Contact> mData;
private LayoutInflater mInflater;
private Context context;
public ContactsAdapter(List<Contact> mData, Context context) {
this.mData = mData;
this.context = context;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int position) {
switch (context.getSharedPreferences("settings",
HomeScreenActivity.MODE_PRIVATE).getInt("displayChoice", -1)) {
case 1:
return mData.get(position).getLastName() + " "
+ mData.get(position).getFirstName();
case 2:
return mData.get(position).getFirstName() + " "
+ mData.get(position).getMobileNumber();
case 3:
return mData.get(position).getLastName() + " "
+ mData.get(position).getMobileNumber();
default:
return mData.get(position).getFirstName() + " "
+ mData.get(position).getLastName();
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CheckedTextView result;
if (convertView == null) {
result = (CheckedTextView) mInflater.inflate(
R.layout.home_screen_contacts_view, parent, false);
} else {
result = (CheckedTextView) convertView;
}
final String contactRow = getItem(position);
result.setText(contactRow);
result.setBackgroundResource(R.drawable.list_selector);
return result;
}
}