我已经扩展了Android ListView
组件,以便在点击它们时更改其列表项,并默认选择第一项。
问题是,当通过添加OnItemClickListener
更改列表项时,当活动覆盖它时不会触发此事件。无论事件是否被覆盖,如何将此行为设置为始终发生?
关于上述内容,我还希望在初始化时将这些更改添加到列表中的第一项(作为默认选择)。我一直在寻找解决方案。我尝试过的一些内容包括尝试setSelection(0)
,setSelected(true)
,setActivated(true)
和setItemChecked(0, true)
。我也一直在尝试使用performClick()
,但这会让NullPointerException
成为现实。
为了表示点击,我使用StateListDrawable
作为android:background
添加到列表项。
StateListDrawable:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_longAnimTime">
<item android:drawable="@android:color/holo_orange_dark" android:state_pressed="true"/>
<item android:drawable="@color/list_active" android:state_selected="true"/>
<item android:drawable="@color/list_active" android:state_activated="true"/>
<item android:drawable="@color/list_active" android:state_checked="true"/>
<item android:drawable="@color/list_background"/>
</selector>
还应该注意的是,我正在为listview使用自定义适配器,即使除了向列表项添加内容之外没有做任何其他事情。
自定义列表视图代码的简短摘录:
public class ShadowListview extends ListView {
public ShadowListView(Context context) {
super(context);
init();
}
...
private void init() {
setOnItemClickListener(new ShadowListViewClicker());
}
private class ShadowListViewClicker implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Handling changes to items here
...
}
}
}
我非常感谢任何对我的问题的帮助,因为我开始松开我的头发:)
答案 0 :(得分:0)
我会在适配器中处理它,维护一个表示所选索引的整数,默认为0.如果索引与所选索引匹配,则修改getView
以不同的方式呈现视图。在适配器中提供将更新所选索引的公共setSelected(int)
方法,并调用notifyDataSetChanged()
刷新列表。在适配器上的onItemClick
方法调用setSelected
中。