在我的应用程序中,我有一个包含列表视图的左窗格。在此列表视图中进行的选择,然后调用相关数据,更新右窗格以及活动中的其他链接和元素。由于此设计,左窗格必须始终进行选择,以便为活动的其余部分提供有用的值。
在我的活动的onCreate方法中,我调用以下内容以默认选择列表中的第一个元素。 (programList是我的listview)
programList.performItemClick(programList, 0, programList.getItemIdAtPosition(0);
除了一件事之外,一切都很好,视图加载正确的值,除了一件事。
我为listview添加了一个drawable选择器,用于突出显示所选元素。在模拟器中物理单击该项时,它将突出显示(我正在使用CHOICE_MODE_SINGLE),但在调用performItemClick()时它不会突出显示。我在stackoverflow上寻找帮助,并尝试在点击之前使用以下内容,但它没有任何区别。
programList.requestFocusFromTouch();
programList.setSelection(0);
从阅读API看起来听起来像setSelection方法没有在触摸界面下设置项目的状态,从我的结果看来,似乎performItemClick方法也没有。我也尝试过使用
programList.getAdapter().getView(0, null, null).setSelected(true);
然后我可以读取文本视图的状态并看到它已被选中,但这也没有改变屏幕上显示的内容。
onCreateMethod中是否有某些东西阻止按钮的状态被不同地绘制?我尝试使单个文本视图中的drawable无效并使文本视图本身无效,但这没有帮助。我也尝试更改文本视图的背景,但似乎我设置的选择器控制或在前面绘制。我知道我有正确的textView,因为我使用了getText来读取内部的内容。
如果有人能够帮助我解决这个问题或指出我的解决方案,我将不胜感激。
答案 0 :(得分:4)
诀窍是覆盖适配器的getView()
方法。试试这个:
@Override
public View getView(int position, View convertView, ViewGroup parent ) {
final View renderer = super.getView(position, convertView, parent);
if (position == index_of_selected_item) {
renderer.setBackgroundResource(android.R.color.darker_gray);
}
return renderer;
}
当然,您可以将背景颜色设置为您喜欢的任何颜色,以表明它是“活动”项目。