【发布时间】:2014-08-12 17:00:46
【问题描述】:
目前正在为该项目使用带有片段设置的标签栏/视图分页器。片段 2 包含一个网格视图。在应用程序启动时,我试图默认选择一个 gridview 单元格 - 但无论我做什么,它都不会“选择”。我开始怀疑这是否是因为在尝试进行选择时,gridview 不在屏幕上(viewpager 的页面/片段 2)。
我正在做的是在 GridViewAdapter 的 getView 方法最初完成之后(我将位置与可能的单元格总数进行比较以确定这一点)我触发一个侦听器消息以选择 GridView 中的默认单元格。我这样做是为了 (a) 确保我尝试选择的单元格不为空,并且 (b) 我想知道 getView 方法是否以某种方式重置了选择。
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
// * Other code that sets up the view
if (listener!=null) {
if ((list.size()-1)==position) {
Log.d(TAG, "Today position set: " + todayPosition);
listener.todayPositionFound(todayPosition);
}
} else {
Log.d(TAG, "LISTENER IS NULL");
}
return row;
}
然后……
public void todayPositionFound(final int position) {
// * ------------------------
// * On startup, select today
// * ------------------------
mCurrentlySelectedDate = DateHelper.todayAsString();
Log.d(TAG, "Todays Position Found: " + position);
View v = calendarView.getChildAt(position);
if (v!=null) {
Log.d(TAG, "V not NULL - SELECTING");
v.setSelected(true);
}
Log.d(TAG, "SELECTED? " + calendarView.getSelectedItemPosition());
}
除了视图未被选中之外,所有这些都没有问题。此外,当我 getSelectedItemPosition 它返回 -1 ...即使我只是“选择”了第 16 位。对此的任何想法都将不胜感激。谢谢!
【问题讨论】:
-
更多信息:如果我采用 todayPositionFound 方法和 findViewById 返回的视图并在该视图中获取 TextView,我可以成功选择该 TextView,包括由于选择而导致的 UI 更改。但这不是我想要的......所以我不完全确定我在选择包含视图而不是子 TextView 时做错了什么......
-
我还发现,如果我通过 onClick 在 GridView 中选择一个单元格,它就可以正常工作。我的猜测是某些东西正在重置选择...我可能是错的,但在这一点上这是我最好的假设。
-
好的,我的猜测是正确的。如果我将选择延迟 5 秒,它会按预期发生......在初始应用启动时发生的事情正在清除选择。
标签: java android gridview android-viewpager selection