Android ListView项目选择问题

时间:2012-02-14 15:32:39

标签: android android-listview google-tv

我在XML中有两个ListView,即 lvPrograms &的 lvEpisodes 即可。它们是水平放置的。

我从Web服务中填写这些ListView。

当Activity加载时,我调用Web服务来获取 lvPrograms 的数据。当我收到程序时,我会为检索到的列表中的第一个程序加载剧集。并将 lvPrograms 的第一项设置为选中/突出显示,以向用户显示已加载的剧集是否适用于此计划项目。我将其设置如下:

private void highlightSelectedProgram(int _previousSelectedProgramIndex, int _currentSelectedProgramIndex) {
    ListView allProgramsList = (ListView) findViewById(R.id.allProgramsList);

    //Get the last selected List Item
    View selectedChild = allProgramsList
            .getChildAt(_currentSelectedProgramIndex);

    //_previousSelectedProgramIndex & _currentSelectedProgramIndex are to keep track 
    //of currently/previously selected PROGRAM index


    if (selectedChild != null) {

        // get selected shape
        Drawable shape = getResources().getDrawable(
                R.drawable.selected_item_selector);

        //change selected item background to be highlighted
        selectedChild.setBackgroundDrawable(shape);

        //change previous item, if any (is not -1), to normal state
        if (_previousSelectedProgramIndex != ._currentSelectedProgramIndex && _previousSelectedProgramIndex != -1) {
            TextView previousChild = (TextView) allProgramsList
                    .getChildAt(_previousSelectedProgramIndex);

            previousChild.setBackgroundResource(R.drawable.item_selector);
        }
    }       
}

当用户点击 PROGRAMS 列表项以突出显示在 lvEpisodes 列表视图中加载 EPISODES 的项目时,我会调用此方法。

如下图所示。

enter image description here

仅当ListView具有更多项目及其可见区域时才会出现问题。因此,当我单击第一个项目时,它的背景会被上面的代码更改但是其他一些项目(也是不可见的项目)也会更改背景。 WHY ??

我认为我错过了一些事情或处理最初不可见的列表项目是不同的。

您可以引导我一种方式,我可以为该项目声明一个背景选择器,它被点击...并且只有点击的项目会保持突出显示..所以如果用户点击其他一些列表中的项目是隐藏项目之一,然后该项目突出显示...因此列表中的任何时候都必须有一个突出显示的项目......如果可能的话,这将是很好的。

随着发布日期的临近,我们非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:2)

使用类似的东西:

 lvPrograms.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 lvPrograms.setSelector(R.drawable.programs_background);

programs_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_activated="true"  android:drawable="@drawable/shape" />
</selector>