ListView 聚焦的问题
Issues with ListView focusing
在我的应用程序中,我有一个 Fragment
,其中包含 GridView
和 ListView
,以使用 CursorAdapter
显示项目。仅启用这两种视图中的一种,用户可以选择他想要查看项目的方式。
所以,在我 Fragment
的 onCreateView
方法中,我有
gv = (GridView) v.findViewById(R.id.itemselect_gridview);
lv = (ListView) v.findViewById(R.id.itemselect_listview);
if (!UserPreferences.isViewStyleGrid(getActivity())) {
showList();
} else {
showGrid();
}
showList
和showGrid
的代码是:
private void showList() {
gv.setVisibility(View.GONE);
lv.setVisibility(View.VISIBLE);
UserPreferences.getPreferences(getActivity()).edit()
.putString(Constants.VIEWSTYLE, "list").commit();
}
private void showGrid() {
lv.setVisibility(View.GONE);
gv.setVisibility(View.VISIBLE);
UserPreferences.getPreferences(getActivity()).edit()
.putString(Constants.VIEWSTYLE, "grid").commit();
}
当应用程序调用 showList
时,我无法使用方向键(游戏控制器)导航 ListView
。按方向键无效,只有触摸输入有效。
如果应用程序改为调用 showGrid
,则方向键可以正常工作。
如果我在运行时从网格切换到列表,方向键在 ListView
上也能正常工作,切换是使用前面提到的相同方法进行的。是什么导致了这个问题?我尝试使用 lv.setFocusable(true)
和 lv.requestFocus()
没有结果。
我意识到调用 showGrid
和 showList
还为时过早,所以我稍微更改了 onCreateView
:
if (UserPreferences.isViewStyleGrid(mFragment.getActivity())) {
gv.post(new Runnable() {
@Override
public void run() {
showGrid();
}
});
} else {
lv.post(new Runnable() {
@Override
public void run() {
showList();
}
});
}
这样在视图完全初始化后调用这两个函数。
在我的应用程序中,我有一个 Fragment
,其中包含 GridView
和 ListView
,以使用 CursorAdapter
显示项目。仅启用这两种视图中的一种,用户可以选择他想要查看项目的方式。
所以,在我 Fragment
的 onCreateView
方法中,我有
gv = (GridView) v.findViewById(R.id.itemselect_gridview);
lv = (ListView) v.findViewById(R.id.itemselect_listview);
if (!UserPreferences.isViewStyleGrid(getActivity())) {
showList();
} else {
showGrid();
}
showList
和showGrid
的代码是:
private void showList() {
gv.setVisibility(View.GONE);
lv.setVisibility(View.VISIBLE);
UserPreferences.getPreferences(getActivity()).edit()
.putString(Constants.VIEWSTYLE, "list").commit();
}
private void showGrid() {
lv.setVisibility(View.GONE);
gv.setVisibility(View.VISIBLE);
UserPreferences.getPreferences(getActivity()).edit()
.putString(Constants.VIEWSTYLE, "grid").commit();
}
当应用程序调用 showList
时,我无法使用方向键(游戏控制器)导航 ListView
。按方向键无效,只有触摸输入有效。
如果应用程序改为调用 showGrid
,则方向键可以正常工作。
如果我在运行时从网格切换到列表,方向键在 ListView
上也能正常工作,切换是使用前面提到的相同方法进行的。是什么导致了这个问题?我尝试使用 lv.setFocusable(true)
和 lv.requestFocus()
没有结果。
我意识到调用 showGrid
和 showList
还为时过早,所以我稍微更改了 onCreateView
:
if (UserPreferences.isViewStyleGrid(mFragment.getActivity())) {
gv.post(new Runnable() {
@Override
public void run() {
showGrid();
}
});
} else {
lv.post(new Runnable() {
@Override
public void run() {
showList();
}
});
}
这样在视图完全初始化后调用这两个函数。