【问题标题】:ListView: How To Make Selected Items Stay 'lit'ListView:如何使选定的项目保持“点亮”
【发布时间】:2013-04-02 09:08:33
【问题描述】:

我正在使用 ListView 来显示项目列表。我点击一个项目以“选择”它,该项目在列表中短暂变为橙色,但随后返回背景颜色。

我怎样才能使该项目保持“点亮”,直到我取消选择它(通过再次点击该项目)?

另外,我可以调用一个方法来清除该列表的所有选定项目吗?

【问题讨论】:

  • clearChoices() 完成清除所选项目的工作。

标签: android android-widget


【解决方案1】:

你需要一个状态列表

在 res/drawable 中创建一个 list_selector.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/orange" />

</selector>  

在列表视图项的布局中,将以下代码添加到主框架布局中

android:background="@drawable/list_selector"  

确保orange colorres/values/colors 中定义

【讨论】:

  • 如何在 res/value/colors 中定义橙色?注意:它不一定是橙色的,我不在乎,任何突出显示所选项目的东西都可以工作。
  • #b0e0e6
  • 您可能还需要将列表视图设置为 setChoiceMode(ListView.CHOICE_MODE_SINGLE);
  • 上面的方法我试过了,还是不行。我创建了文件: res/values/colors.xml,内容如下: #b0e0e6 你是这个意思吗?
  • 另外,这不会编译。 javac找不到符号:setChoiceMode(ListView.CHOICE_MODE_SINGLE);
【解决方案2】:

您需要使用选择器,然后在 onListItemClick() 中使用 setSelected(true)

<?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/orange" />
    <item android:state_selected="false"
        android:drawable="@android:color/list_default" />
</selector>

同时覆盖我的 onListItemClick() 方法:

@Override
protected void onListItemClick(ListView l, View view, int position, long id) {
    super.onListItemClick(l, view, position, id);
    view.setSelected(true);
}

EDIT:
public class YourClass extends ListActivity implements OnItemClickListener {

@Override
public void onCreate(Bundle icicle){
    super.onCreate(icicle);
    setContentView(R.layout.your_layout);

    getListView().setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) {
    view.setSelected(true);
}

}

【讨论】:

  • 我在上面添加了 onListItemClick() 代码(没有 view.setSelected(true);)并收到很多编译器错误消息。这些消息是“非法类型的开头”和很多“;”预计。
  • 确保你的类实现了 OnItemClickListener。查看我的编辑并遵循类结构。
  • 如果我改变我的代码来实现 OnItemClickListener 在你的例子中,那么我会收到很多 javac 错误消息:LinearLayoutDemo.java:24: com.commonsware.android.linearpct.LinearLayoutDemo 不是抽象的并且确实不覆盖 android.widget.AdapterView.OnItemClickListener [javac] public class LinearLayoutDemo extends ListActivity implements OnItemClickListener { [javac] LinearLayoutDemo.java 中的抽象方法 onItemClick(android.widget.AdapterView>,android.view.View,int,long) :90: android.view.View 中的 setOnClickListener(android.view.View.OnClickListener) 无法应用 ....
  • 另外,选择器进入什么文件?
  • res/drawable/list_selector.xml?
猜你喜欢
  • 2011-08-06
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多