我在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 的项目时,我会调用此方法。
如下图所示。
仅当ListView具有更多项目及其可见区域时才会出现问题。因此,当我单击第一个项目时,它的背景会被上面的代码更改但是其他一些项目(也是不可见的项目)也会更改背景。 WHY ??
我认为我错过了一些事情或处理最初不可见的列表项目是不同的。
或您可以引导我一种方式,我可以为该项目声明一个背景选择器,它被点击...并且只有点击的项目会保持突出显示..所以如果用户点击其他一些列表中的项目是隐藏项目之一,然后该项目突出显示...因此列表中的任何时候都必须有一个突出显示的项目......如果可能的话,这将是很好的。
随着发布日期的临近,我们非常感谢任何帮助。 感谢
答案 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>