突出显示ListView

时间:2015-09-11 16:06:21

标签: android listview android-listview

这个问题并不新鲜。但是,任何解决方案都不适用于我。

我有一个带有几个TextView的ListView,它是从SQLite提取的数据中填充的。用户可以在一个项目上使用LongPress来选择多个ListView项目,并进一步选择从数据库中删除它们。

接下来我要做的是突出显示用户在第一个LongPress(包括第一个)之后选择的项目。
这是我的ListView的片段。

    <ListView
        ...
        android:drawSelectorOnTop="false"
        android:listSelector="@android:color/darker_gray"
        android:choiceMode="multipleChoice"/>

这是突出显示ListView的项目,但不是用户将在其上执行LongPress的第一项。并且只突出显示ListView上的一个项目,每当用户选择另一个项目时,重置当前项目并更改新项目的背景,这将继续。

修改

这是我的setMultiChoiceModeListener

的JAVA实现
list.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {

                final int checkedCount = list.getCheckedItemCount();
                mode.setTitle(checkedCount + " Selected");
                listViewAdapter.toggleSelection(position);

            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                mode.getMenuInflater().inflate(R.menu.hold_activity_actions, menu);
                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                SparseBooleanArray selected = listViewAdapter.getSelectedItemIds();

                switch (item.getItemId()) {
                    case R.id.delete:
                        for (int i = (selected.size() - 1); i >= 0; i--) {
                            if (selected.valueAt(i)) {
                                bloodPressureRecords selectedItem = listViewAdapter.getItem(selected.keyAt(i));
                                // Remove selected items following the ids
                                listViewAdapter.remove(selectedItem);
                                db.deleteRecord(selectedItem);
                            }
                        }
                        mode.finish();
                        return true;
                    default:
                        return false;
                }

            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                listViewAdapter.removeSelection();
            }
        });

2 个答案:

答案 0 :(得分:0)

尝试在longClick上设置textview的背景颜色。 例如:

textView.setBackgroundColor(Color.DKGRAY);

答案 1 :(得分:0)

好的问题在SO上建议的不同方式进行一些实验时已经解决了 这就是我为了得到我想要的而做的事情

将此添加到我的相对布局中,我在其中定义了ListView的布局     项目

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true"
        android:drawable="@android:color/darker_gray"/>
</selector>

在可绘制文件夹

中创建了一个新资源文件
'labelThreshold':0.5,
'labelType':'percent',
'donut':True,
'donutRatio':0.35

这就是我所做的一切,以获得所需的结果。