cot*_*aws 21 android listview onclick
我有一个ListView,当通过onItemClick侦听器单击项目行时,它会打开另一个活动.
我希望该行从点击时到屏幕切换到新活动时保持按下状态.我认为这对用户来说是一个更清晰的体验,你会看到这种事情,大多数按钮打开/关闭对话框或切换活动.
我尝试在onItemClick()监听器中设置view.setPressed(true),但似乎在按下状态变回正常状态后调用了一会儿,因为它略微闪烁.
例如:
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setPressed(true);
//start an activity
}
});
Run Code Online (Sandbox Code Playgroud)
除了闪烁之外,该代码几乎可以工作(用户按下列表项并转到其按下状态,然后用户放开(完成点击),然后返回到正常状态一瞬间,然后返回到按下状态来自setPressed(true)调用)
有任何想法吗?
谢谢
编辑:我应该提到我使用xml drawable选择器来定义列表背景的正常,按下,选择等状态.
Rud*_*ing 26
我有同样的问题非常沮丧!
然而,通过替换state_pressed
可以很容易地解决这个问题state_selected
.在onItemClick()
调用之前,按下的状态仍会快速变化,但由于您的主题不依赖于state_pressed
闪烁,因此不可见.一旦进入onItemClick()
您的设置state_selected
,该项目将保持选中状态,不会发生任何闪烁.
这是我的选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selected Item -->
<item android:state_selected="true"
android:drawable="@color/list_pressed" />
<!-- Default Item -->
<item android:state_selected="false"
android:drawable="@android:color/list_default" />
</selector>
Run Code Online (Sandbox Code Playgroud)
我的onListItemClick(...):
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
v.setSelected(true);
//TODO: add further actions here
}
Run Code Online (Sandbox Code Playgroud)
在Android 3.0之前,最好的方法是在自定义视图中使用自定义状态或从适配器更改视图的背景颜色.从Android 3.0开始,您可以使用new state_activated
来保持选择列表项.