首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android ListView选中项保持高亮显示

Android ListView选中项保持高亮显示
EN

Stack Overflow用户
提问于 2013-04-24 18:29:08
回答 7查看 236.9K关注 0票数 77

我有一个包含两个ListViewXML,一个包含由select查询填充的客户端列表(lv_cli),另一个包含所选客户端的详细信息(lv_cli_det)。当lv_cli_det显示详细信息时,我希望保持客户端在lv_cli中处于选中状态。

XML:

<ListView
    android:id="@+id/cli_lista"
    android:layout_width="512dp"
    android:layout_height="wrap_content"
    android:fadeScrollbars="false"
    >
</ListView>

<ListView
    android:id="@+id/cli_lista_det"
    android:layout_width="512dp"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/cli_lista"
    android:fadeScrollbars="false" >
</ListView>

Java:

Cursor cursor = db.rawQuery("Select NrCl||';'||Nome From Clientes", null);
final ListView t = (ListView)findViewById(R.id.cli_lista);
ArrayAdapter<String> myarrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, listItems);
t.setAdapter(myarrayAdapter);

final ListView td = (ListView)findViewById(R.id.cli_lista_detalhe);
final ArrayAdapter<String> myarrayAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, listItems2);

t.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String item = ((TextView)view).getText().toString();
        String[] strArray = item.split("\\;");

        cli.load(strArray[0].toString());
        td.setAdapter(myarrayAdapter2);
        listItems2.clear();
        listItems2.add("Nome: " + cli.getNome());
        listItems2.add("Morada: " + cli.getMorada());
        listItems2.add("Localidade: " + cli.getLoca());
        listItems2.add("Código Postal: " + cli.getCp());
        listItems2.add("Pais: " + cli.getPais());
        listItems2.add("Nif: " + cli.getNif());
        listItems2.add("Tel: " + cli.getTel());
        listItems2.add("Tlm: " + cli.getTlm());
        listItems2.add("Tipo Preço: " + cli.getTipoPvn());
        listItems2.add("Cond. Pagamento: " + cli.getCpg());
        listItems2.add("Obs: " + cli.getObs());
        td.setAdapter(myarrayAdapter2);
        myarrayAdapter2.notifyDataSetChanged(); 
    }
});
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-04-24 18:59:34

要在您按下listview项目时保持其颜色,请在listview项目布局中包括以下行:

android:background="@drawable/bg_key"

然后在drawable文件夹中定义bg_key.xml,如下所示:

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

最后,将其包含在您的ListView onClickListener

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) {
        view.setSelected(true);
        ... // Anything
    }
});

这样,任何时候都只有一个项目会被选择颜色。您可以在res/values/colors.xml中定义颜色值,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="pressed_color">#4d90fe</color>
    <color name="default_color">#ffffff</color>
</resources>
票数 136
EN

Stack Overflow用户

发布于 2014-08-05 12:17:33

我找到了正确的方法。这很简单。在资源中描述如下:

android:choiceMode="singleChoice"
android:listSelector="#666666"

(或者您可以指定资源链接,而不是颜色值)

程序化:

listView.setSelector(Drawable selector);
listView.setSelector(int resourceId);
listView.setChoiceMode(int mode);

模式可以是以下之一: AbsListView.CHOICE_MODE_SINGLE、AbsListView.CHOICE_MODE_MULTIPLE、AbsListView.CHOICE_MODE_NONE (默认)

(AbsListView是ListView类的抽象祖先)

另外,使用onItemClick和改变视图背景的操作是失败的,因为视图本身是一个临时对象。因此,您不能跟踪视图。

如果我们的列表足够长,与滚动出的项目相关联的视图将从层次结构中删除,并在这些项目再次显示时重新创建(使用缓存的显示选项,如背景)。因此,我们跟踪的视图现在不是项目的实际视图,并且更改其背景对实际项目视图没有任何影响。因此,我们选择了多个项目。

票数 167
EN

Stack Overflow用户

发布于 2013-11-26 18:23:23

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            for (int j = 0; j < adapterView.getChildCount(); j++)
                adapterView.getChildAt(j).setBackgroundColor(Color.TRANSPARENT);

            // change the background color of the selected element
            view.setBackgroundColor(Color.LTGRAY);
});

您可能希望使用索引i将当前选定的元素保存在全局变量中。

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16189651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档