Java Android-GridView无法运行
当前正在使用tabbar/viewpager,并为此项目设置了片段。片段2包含一个gridview。在应用程序启动时,默认情况下我会尝试选择一个gridview单元格,但无论我做什么,它都不会“选择”。我开始怀疑这是否是因为在尝试进行选择时,gridview已脱离屏幕(viewpager的第2页/片段) 我所做的是在GridViewAdapter的getView方法最初完成之后(我将位置与可能的单元格总数进行比较以确定这一点),我触发一条侦听器消息以选择GridView中的默认单元格。我这样做是为了(a)确保我尝试选择的单元格不为空,以及(b)我想知道getView方法是否以某种方式重置了选择Java Android-GridView无法运行,java,android,gridview,android-viewpager,selection,Java,Android,Gridview,Android Viewpager,Selection,当前正在使用tabbar/viewpager,并为此项目设置了片段。片段2包含一个gridview。在应用程序启动时,默认情况下我会尝试选择一个gridview单元格,但无论我做什么,它都不会“选择”。我开始怀疑这是否是因为在尝试进行选择时,gridview已脱离屏幕(viewpager的第2页/片段) 我所做的是在GridViewAdapter的getView方法最初完成之后(我将位置与可能的单元格总数进行比较以确定这一点),我触发一条侦听器消息以选择GridView中的默认单元格。我这样做是
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());
}
除了视图未被选中之外,所有这些都不会出现问题。此外,当我获取SelectedItemPosition时,它返回-1。。。尽管我刚刚“选择”了16号位置。如果您对此有任何想法,我们将不胜感激。谢谢大家! 为了让它工作,我使用了一个处理程序和Runnable:
public void todayPositionFound(final int position) {
Handler h = new Handler();
Runnable r =new Runnable() {
public void run() {
View v = calendarView.getChildAt(position);
if (v!=null) {
v.setSelected(true);
}
}
};
h.postDelayed(r, 500);
}
如果有人有更好的解决方案,请务必让我知道。谢谢 只能在绘制列表/网格视图后更新列表滚动位置。调用
onCreate()
或onResume()
或onCreateView()
后不久就会发生这种情况
您可以尝试使用全局布局侦听器在绘制GridView时告诉您,例如:
GridView calendarView = (GridView)findViewById(R.id.YOUR_VIEW_ID);
ViewTreeObserver viewTreeObserver = calendarView.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
this.calendarView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
View v = calendarView.getChildAt(position);
if (v!=null) {
v.setSelected(true);
}
}
});
进一步信息:如果我获取TodayPositionFind方法和findViewById返回的视图,并获取该视图中的TextView,我可以成功选择该TextView,包括由于选择而导致的UI更改。但这不是我想要的。。。因此,我不完全确定选择包含视图而不是子文本视图有什么不对……我还发现,如果我通过onClick在GridView中选择一个单元格,它就可以正常工作。我猜这里有什么东西正在重置选择。。。我可能错了,但这是我最好的假设。好吧,我的猜测是正确的。如果我延迟选择5秒,它会按预期发生。。。在初始应用程序启动时发生的某些情况正在清除所选内容。