Android:将以编程方式单击的列表视图项设置为选定状态

时间:2012-10-12 22:03:07

标签: android listview selection statelistdrawable

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

在我的活动的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来读取内部的内容。

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

1 个答案:

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

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