6

在我的应用程序中,我有一个包含列表视图的左窗格。在此列表视图中进行的选择会调用相关数据,从而更新右窗格以及活动中的其他链接和元素。由于这种设计,左窗格必须始终进行选择,以便为活动的其余部分提供有用的值。

在我的活动的 onCreate 方法中,我调用以下命令以默认选择列表中的第一个元素。(programList 是我的列表视图)

programList.performItemClick(programList, 0, programList.getItemIdAtPosition(0);

这一切都很好,并且视图按预期加载正确的值,除了一件事。

我为列表视图添加了一个可绘制的选择器,它突出显示了选定的元素。当在模拟器中物理单击该项目时,它会突出显示(我使用的是 CHOICE_MODE_SINGLE),但在调用 performItemClick() 时它不会突出显示。我四处寻找有关stackoverflow的帮助,并尝试在单击之前使用以下内容,但这并没有什么不同。

    programList.requestFocusFromTouch();
    programList.setSelection(0);

从读取 API 看来,setSelection 方法并没有在触摸界面下设置项目的状态,从我的结果来看,performItemClick 方法似乎也没有。我也尝试使用

    programList.getAdapter().getView(0, null, null).setSelected(true);

然后我可以读取文本视图的状态并看到它已被选中,但这也没有改变屏幕上显示的内容。

onCreateMethod 中是否存在阻止按钮状态以不同方式绘制的内容?我尝试使单个文本视图中的可绘制对象无效并使文本视图本身无效,但这没有帮助。我还尝试更改文本视图的背景,但似乎我设置的选择器控制它或绘制在前面。我知道我有正确的 textView 因为我使用 getText 来阅读里面的内容。

如果有人能够帮助我解决这个问题或指出我的解决方案,将不胜感激。

4

1 回答 1

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;
}

当然,您可以将背景颜色设置为您喜欢的任何颜色,以表明它是“活动”项目。

于 2012-10-12T23:05:17.803 回答