Mic*_*tke 8 android android-menu android-fragments
好的,所以我有了CameraList,扩展了GalleryList,扩展了ListFragment:
public static class FavoritesList extends GalleryList {
public static FavoritesList newInstance(int page) {
FavoritesList list = new FavoritesList();
Bundle args = new Bundle();
args.putInt("page", page);
list.setArguments(args);
return list;
}
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
Cursor cursor = dbHelper.getGalleries(fav, preferences.getString("sort"+fav, "date desc"));
listAdapter = new GalleryListAdapter(activity, cursor);
setListAdapter(listAdapter);
}
...
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.add(Menu.NONE, 0, 8, "Remove All");
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
//listAdapter is null the first time this is called...
if (listAdapter != null && listlistAdapter.getCount() == 0) {
menu.findItem(R.id.filter).setEnabled(false);
menu.findItem(0).setEnabled(false);
}
else {
menu.findItem(R.id.filter).setEnabled(true);
menu.findItem(0).setEnabled(true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是问题:onPrepareOptionsMenu 在加载此片段之前在 onCreate(我初始化listAdapter)之前调用,并且在第一次显示选项菜单之前不会再次调用它!
该片段文件是完全错误的,当它声称onPrepareOptionsMenu"被称为权之前显示的菜单,每一次它显示."
ps我正在使用Android支持库(v4).有任何想法吗?
因此,尽管这很愚蠢,但这里有一个有效的解决方法:
public static class FavoritesList extends GalleryList {
Menu optionsMenu;
...
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
Cursor cursor = dbHelper.getGalleries(fav, preferences.getString("sort"+fav, "date desc"));
listAdapter = new GalleryListAdapter(activity, cursor);
setListAdapter(listAdapter);
if (optionsMenu != null) {
onPrepareOptionsMenu(optionsMenu);
}
}
...
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
optionsMenu = menu;
if (listAdapter != null && listAdapter.getCount() == 0) {
menu.findItem(R.id.filter).setEnabled(false);
menu.findItem(0).setEnabled(false);
}
else {
menu.findItem(R.id.filter).setEnabled(true);
menu.findItem(0).setEnabled(true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我在第一次运行 onPrepareOptionsMenu 期间获取了选项菜单,然后在初始化 listAdapter 后再次调用它。
编辑:显然,如果不检查 optionsMenu 是否为空,这将在某些手机上中断。我早该意识到的。
| 归档时间: |
|
| 查看次数: |
2713 次 |
| 最近记录: |