【发布时间】:2016-08-12 13:59:12
【问题描述】:
社区! 我需要帮助更新 ListView 中的不可见项目。这与项目内容无关,而是项目的视图表示。 好的,让我向您展示我的示例。我有一个字符串数组:
<string-array name="reminder_notifications">
<item>15 minutes before</item>
<item>30 minutes before</item>
<item>1 hour before</item>
<item>1.5 hour before</item>
<item>5 hours before</item>
<item>8 hours before</item>
<item>1 day before</item>
</string-array>
在 Activity 中我创建了适配器:
adapterNotifications = ArrayAdapter.createFromResource(this, R.array.reminder_notifications, R.layout.dialog_list_multiple_choise);
之后,我通过一些方法从字符串数组中计算出哪些项目可用于当前提醒。例如。如果用户在 16:00 设置了 16:45 的提醒,那么他只能选择项目 15 minutes before 和 30 minutes before。其他项目应禁用。
所以,在谷歌之后,我发现了如何在某个位置访问不可见的 ListView 子项:
public View getViewByPosition(int position, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (position < firstListItemPosition || position > lastListItemPosition ) {
return listView.getAdapter().getView(position, listView.getChildAt(position), listView);
} else {
final int childIndex = position - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
现在,我面临最后一个问题(我希望如此) - 如何更新我从上述方法获得的项目视图?我试着用这个:
View v = getViewByPosition(position, lvNotifications);
v.setEnabled(true);
但它只在第一次打开对话框后更新视图,换句话说,我必须用 ListView 打开对话框窗口,关闭它并重新打开。只有在这种情况下,我才会获得更新的视图。 我知道,我的英语很糟糕,所以下面有截图:
谢谢。
【问题讨论】: