本篇文章给大家谈谈android–onCreateOptionsMenu用片段命中倍数,同时本文还将给你拓展AndroidonCreateOptionsMenuonPrepareOptionsMenu
本篇文章给大家谈谈android – onCreateOptionsMenu用片段命中倍数,同时本文还将给你拓展Android onCreateOptionsMenu onPrepareOptionsMenu、Android onCreateOptionsMenu的使用方法总结、Android – Bundle savedInstanceState在Fragment onCreate()和onCreateView()中为null、android – onPrepareOptionsMenu在ActionBar中复制项目等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- android – onCreateOptionsMenu用片段命中倍数
- Android onCreateOptionsMenu onPrepareOptionsMenu
- Android onCreateOptionsMenu的使用方法总结
- Android – Bundle savedInstanceState在Fragment onCreate()和onCreateView()中为null
- android – onPrepareOptionsMenu在ActionBar中复制项目
android – onCreateOptionsMenu用片段命中倍数
我不确定为什么再次调用onCreateOptionsMenu因为我只是在“details”片段中调用一个方法:
@Override public void onListItemClick(final ListView l,final View v,final int position,final long id) { DetailsFragment fragment = (DetailsFragment)getFragmentManager().findFragmentById(R.id.fragmentDetails); if (fragment != null && fragment.isInLayout()) { fragment.displayItems(); } else { final Intent listing = new Intent(activity.getApplicationContext(),DetailsFragmentActivity.class); startActivity(listing); } }
更新:
我正在使用此代码为菜单项设置动画:
private MenuItem refreshItem; private void DoRefresh() { final LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view,null); final Animation rotation = AnimationUtils.loadAnimation(activity,R.anim.refresh); ImageView ivRefresh.startAnimation(rotation); refreshItem.setActionView(ivRefresh); //AsyncTask is kicked off here } @Override public boolean onoptionsItemSelected(final MenuItem item) { if (item.getItemId() == R.id.refresh) { refreshItem = item; this.DoRefresh(); return true; } else { return super.onoptionsItemSelected(item); } }
解决方法
“在系统调用onCreateOptionsMenu()之后,它会保留您填充的菜单的实例,并且不会再次调用onCreateOptionsMenu(),除非由于某种原因菜单无效.但是,您应该仅使用onCreateOptionsMenu()来创建初始菜单状态而不是在活动生命周期中做出改变.“
我的猜测是,你正在做的事情使菜单无效. fragment.displayItems()有什么作用?
Android onCreateOptionsMenu onPrepareOptionsMenu
异步刷新menu :getActivity().supportInvalidateOptionsMenu();
onPrepareOptionsMenu
每次访问都重新填充菜单项
onCreateOptionsMenu
1. onPrepareOptionsMenu()调用时机。
一般情况下,每次按menu键Framewrok都会先调用onPrepareOptionsMenu(),准备需要显示的菜单。但是当按menu键之前调用了Activity.invalidateOptionsMenu()之后,情况变的不一样,调用完Activity.invalidateOptionsMenu()之后,Framework会立即调用onPrepareOptionsMenu()准备好菜单项数据,之后当用户按menu键时,Framework不会再次调用onPrepareOptionsMenu(),而是将之前准备好的菜单显示出来。这点一定要注意。
2. 清除之前的menu数据。
每次调用onPrepareOptionsMenu()的时候需要首先调用menu.clear()清除一下之前的menu数据,如果不清除的话,之前的menu数据不会被释放,造成内存泄漏。
1、复写onPrepareOptionsMenu方法
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();//先清除已经建好的menu
MenuInflater inflater = getActivity().getMenuInflater();
//根据各种条件,重新设置menu
if (isDeleteIconOnActionBar){
inflater.inflate(R.menu.delete_action, menu);
}else if(isRefreshIconOnActionBar){
inflater.inflate(R.menu.delete_refresh_action, menu);
}else{
inflater.inflate(R.menu.main_activity_actions, menu);
}
super.onPrepareOptionsMenu(menu);
}
2、在需要修改menu的地方调用
getActivity().supportInvalidateOptionsMenu();
Android onCreateOptionsMenu的使用方法总结
Android onCreateOptionsMenu的使用方法总结
任何一款软件都少不了对“菜单”的使用。在Android下,每一个activity都捆绑了一个Menu,要想定义和使用菜单,都必须在Activity下进行操作,复写onCreateOptionsMenu 和 onoptionsItemSelected这两个方法。举例如下:
@Override public boolean onCreateOptionsMenu(Menu menu) { //调用基类的方法,以便调出系统菜单(如果有的话) super.onCreateOptionsMenu(menu); menu.add(0,1,"重新开始").setIcon(R.drawable.refresh); menu.add(0,2,"游戏指南").setIcon(R.drawable.help); menu.add(0,3,"关于游戏").setIcon(R.drawable.info); menu.add(0,4,"不想玩了").setIcon(R.drawable.exit); //返回值为”true”,表示菜单可见,即显示菜单 return true; }
看一看menu.add的方法中的参数:
第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。可以用到的方法有:
removeGroup(id) setGroupCheckable(id,checkable,exclusive) setGroupEnabled(id,boolean enabled) setGroupVisible(id,visible)
个人认为,当你需要在不同场合下显示不同的menu的时候,合理使用这个参数将更为有效的处理菜单的显示。否则一般情况下都归为一组。
第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个Menu中的选项。在后面使用菜单的时候,就是靠这个item ID来判断,你选中的是哪个选项。
第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的顺序来显示。
第四个String类型的title参数,表示选项中显示的文字。
再看看setIcon方法,就是为菜单添加图标显示,使用用资源文件。
设计好了菜单,继续复写onoptionsItemSelected方法,用以对菜单的响应,示例代码:
@Override public boolean onoptionsItemSelected(MenuItem item) { super.onoptionsItemSelected(item); switch(item.getItemId()){ case 1: //处理代码 break; case 2: //处理代码 break; case 3: //处理代码 break; case 4: finish(); break; } return true; }
以上就是Android onCreateOptionsMenu的参数详细介绍,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助大家,谢谢大家对本站的支持!
Android – Bundle savedInstanceState在Fragment onCreate()和onCreateView()中为null
我试图将参数传递给片段.
单击片段视图时,我将片段替换为另一个片段并将数据传递给下一个片段.
我的点击动作:
public void onClick(View view) {
Bundle args = new Bundle();
args.putSerializable("order", orders.get(position));
OrderDetailFragment orderDetailFragment = new OrderDetailFragment();
orderDetailFragment.setArguments(args);
FragmentManager fragmentManager = ((AppCompatActivity) context).getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.order_activity_content_frame, orderDetailFragment)
.addToBackStack("orderDetails")
.commit();
}
但是在我的目标Fragment中,savedInstanceState将变为null.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
order = (Order) savedInstanceState.getSerializable("order");
View rootView = inflater.inflate(R.layout.fragment_order_details, container, false);
TextView date = (TextView) rootView.findViewById(R.id.order_detail_date);
date.setText((CharSequence) order.getCreatedOn());
return rootView;
}
我无法弄清楚到底错过了什么?
解决方法:
savedInstanceState包含保存在onSaveInstanceState()中的数据,该数据在您的活动/片段被OS杀死之前调用(例如,回收内存,或者因为方向更改).
调用getArguments()以获取使用setArguments()保存的Bundle:
order = (Order) getArguments().getSerializable("order");
此外,建议使用参数实例化Fragment的做法是通过静态newInstance()方法,如下所示:
public static OrderDetailFragment newInstance(Order order) {
Bundle args = new Bundle();
args.putSerializable(KEY_ORDER, order);
OrderDetailFragment fragment = new OrderDetailFragment();
fragment.setArguments(args);
return fragment;
}
然后你像这样实例化你的片段:
OrderDetailFragment orderDetailFragment = OrderDetailFragment
.newInstance(orders.get(position));
android – onPrepareOptionsMenu在ActionBar中复制项目
当我使用onPrepareOptionsMenu添加菜单项时,菜单项会在操作栏中复制其自身.我正在使用片段并在主要活动的ActionBar中创建初始菜单,如下所示:
...
@Override
public boolean onCreateOptionsMenu(Menu paramMenu) {
super.onCreateOptionsMenu(paramMenu);
paramMenu.add(0, 1, 0, "DashBoard").setIcon(R.drawable.ic_dashboard)
.setShowAsAction(1);
return true;
}
然后我在其中一个片段中添加另一个项目如下:
...
@Override
public void onPrepareOptionsMenu(Menu paramMenu) {
paramMenu.add(0, 2, 1, "FullScreen").setIcon(R.drawable.ic_fullscreen)
.setShowAsAction(1);
}
由于某种原因,通过片段类添加的项目显示两次….我有什么不对吗?
对我的错误的任何帮助将不胜感激
解决方法:
该项目可能会显示两次,因为您要添加两次.见docs for onPrepareOptionsMenu
:
This is called right before the menu is shown, every time it is shown.
我真的不会盲目地在onPrepareOptionsMenu中添加一个项目.您应该检查它是否已经先添加.
我们今天的关于android – onCreateOptionsMenu用片段命中倍数的分享就到这里,谢谢您的阅读,如果想了解更多关于Android onCreateOptionsMenu onPrepareOptionsMenu、Android onCreateOptionsMenu的使用方法总结、Android – Bundle savedInstanceState在Fragment onCreate()和onCreateView()中为null、android – onPrepareOptionsMenu在ActionBar中复制项目的相关信息,可以在本站进行搜索。
本文标签: