【发布时间】:2013-08-20 18:17:50
【问题描述】:
我有一个由 3 个连续的 ListView 组成的布局。在最左边的列表中选择一个项目将启动第二个列表,依此类推。我试图从选择最左侧列表中的第一项开始片段,并且由于需要大量逻辑,我试图在单击时触发而不是重做所有逻辑。我正在使用这个:
mListView.performItemClick(mListView, 0, mListView.getItemIdAtPosition(0));
我正在尝试的可能吗?如果是的话,我该怎么称呼它?
回答:
所以看来这对我不起作用的原因是因为我手动突出显示行视图中的一个视图并且它还没有被实例化(或类似的东西)。
我在 ListView 布局后使用此代码调用它:
mListView.post(new Runnable() {
@Override
public void run() {
mListView.performItemClick(mListView, 0, mListView.getItemIdAtPosition(0));
}
});
编辑:
我有 4 个列表,它们依赖于在实例化之前从之前的列表发送的数据,并且出于某种奇怪的原因,这个可运行的方法仅适用于第一个列表。对于其他人,我使用了这个答案:https://stackoverflow.com/a/15399035/1549672。此外,奇怪的是,这不适用于第一个列表。所有列表几乎完全相同。
【问题讨论】:
-
除非我没有正确理解某些内容,否则我并没有真正看到将相同的
OnItemClickListener附加到每个ListViews 的好处。不过,就个人而言,为了便于阅读,我会考虑为 3 个列表设置单独的侦听器。基本流程不需要大量逻辑。 -
每个列表都有自己的听众。我想要的是当第一次创建包含 3 个列表的片段时,我希望单击第一个列表的第一项,这将打开其相应的第二个列表等。
-
基本上,列表的制作是为了让每个列表都依赖于前一个列表,所以我不能只打开它们
-
用
OnItemSelectedListener代替怎么样?我更喜欢调用listview.setSelection(index)而不是以编程方式发送点击事件。 -
您可以尝试将选择更改包含在
Runnable中,然后将其发布到ListView。这样,在ListView被测量和布局等之前,选择不会发生变化。我认为这并不重要,只要您在尝试更改选择之前设置适配器。