列表视图,checkedTextView无法按预期工作

时间:2013-10-12 06:41:34

标签: android listview

我有一个列表视图的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 drawable:

<?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;
    }

}

0 个答案:

没有答案