如何突出显示列表视图中的多个项目?

时间:2014-04-29 13:32:45

标签: android listview

大家好我想在列表视图中突出显示多个项目。

所以我尝试SngList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);,但它没有帮助

我正在使用自定义适配器并扩展BaseAdapter

我使用的是ListView而不是AbsListView

我不想使用CAB,因为它与我的应用程序的设计不相符

我也不想使用适配器的getView方法。

我也不想使用复选框,我想我会为每个项目使用布尔值并将其传递给getviews如果我在这里没有得到解决方案,但是没有#&# 39;看起来太优雅和整洁。我相信在没有使用适配器的getview()

的情况下,有一种正确的内置方式

我试过了:

android:drawSelectorOnTop="false"
android:listSelector="@android:color/darker_gray"

在xml中,但它只突出显示其中一个项目,只要我点击另一个项目,它就会突出显示它......

那么有没有正确的方法呢?

以下是我的应用的外观:

enter image description here

3 个答案:

答案 0 :(得分:3)

SngList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

这应该足够了,但你必须使用getView来区分所选和未选择的状态。

您可以使用isItemChecked()方法来确定是否选择了项目的天气,因此您不必为每个项目引入布尔变量。

修改

这样的事情:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ListView list = (ListView) parent;

    if(list.isItemChecked(position)){
        //...
    }
    else{
        //...
    }

答案 1 :(得分:3)

您可以使用与CAB相同的逻辑,但避免使用CAB。

您的列表项应该具有FrameLayout,如

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:foreground="?android:attr/activatedBackgroundIndicator">

....

设置onItemClickListener以在长按

时更改选择模式
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        if (mInMultiChoiceMode) {
            // if already in multi choice - do nothing
            return false;
        }

        mInMultiChoiceMode = true;
        // set checked selected item and enter multi selection mode
        final AbsListView list = (AbsListView) arg0;
        list.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
        list.setItemChecked(arg2, true);

        return true;
    }
});

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        if (mInMultiChoiceMode) {
            //exit multi choice mode if number of selected items is 0
            if (((AbsListView) arg0).getCheckedItemCount() == 0) {
                ((AbsListView) arg0).setChoiceMode(AbsListView.CHOICE_MODE_NONE);
                mInMultiChoiceMode = false;
            }
        } else {
            // do whatever you should as in normal non-multi item click
            System.out.println("CLICK");
        }
    }
});

答案 2 :(得分:1)

使用 SngList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

然后在适配器中手动执行。