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

ndw*_*ndw 6 android listview selection statelistdrawable

在我的应用程序中,我有一个包含列表视图的左窗格.在此列表视图中所做的选择,然后调用相关数据,这将更新右侧窗格中,并在活动的其他环节和要素.由于此设计,左窗格必须始终进行选择,以便为活动的其余部分提供有用的值.

在我的活动的onCreate方法中,我调用以下内容以默认选择列表中的第一个元素.(programList是我的listview)

programList.performItemClick(programList, 0, programList.getItemIdAtPosition(0);
Run Code Online (Sandbox Code Playgroud)

除了一件事以外,一切都很好,视图加载正确的值和正确的值.

我为listview添加了一个drawable选择器,它突出显示了所选元素.在模拟器中物理单击该项时,它将突出显示(我正在使用CHOICE_MODE_SINGLE),但在调用performItemClick()时它不会突出显示.我在stackoverflow上寻找帮助,并尝试在点击之前使用以下内容,但它没有任何区别.

    programList.requestFocusFromTouch();
    programList.setSelection(0);
Run Code Online (Sandbox Code Playgroud)

通过阅读API,听起来像setSelection方法没有在触摸界面下设置项目的状态,从我的结果看来,似乎performItemClick方法也没有.我也试过用

    programList.getAdapter().getView(0, null, null).setSelected(true);
Run Code Online (Sandbox Code Playgroud)

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

onCreateMethod中是否有某些东西阻止按钮的状态被不同地绘制?我尝试使单个文本视图中的drawable无效并使文本视图本身无效,但这没有帮助.我也尝试更改文本视图的背景,但似乎我设置的选择器控制或在前面绘制.我知道我有正确的textView因为我使用了getText来读取里面的内容.

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

Blu*_*mer 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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我如何获得index_of_selected_item值 (2认同)