Joe*_*igi 73 android android-fragments android-toolbar
我有一个工具栏和一个导航抽屉.当我启动我的应用程序时,会创建工具栏和导航抽屉.当我单击导航抽屉中的项目时,它会启动新的片段并保留相同的工具栏.当我启动特定片段时,如何将菜单项添加到工具栏中,例如搜索,添加,编辑?我不希望它们在程序的开头,但是动态创建.此外,我如何能够单击这些按钮并让它们启动其他片段.我希望它在一个片段中,与另一个片段中的编辑按钮相比,工具栏中的编辑按钮执行特定的操作.谢谢!
Menu_toolbar:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/edit"
android:orderInCategory="1"
android:title="Edit"
app:showAsAction="always"
android:icon="@drawable/pencil_icon"/>
<item android:id="@+id/add"
android:orderInCategory="1"
android:title="Add"
app:showAsAction="always"
android:icon="@drawable/plus_icon"/>
Run Code Online (Sandbox Code Playgroud)
工具栏:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#10a1ff"
android:title="Home"
/>
Run Code Online (Sandbox Code Playgroud)
Gun*_*gar 136
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.library_fragment, parent, false);
setHasOptionsMenu(true);
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
All*_*han 31
这是动态创建菜单的方法:http: //www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html
编辑:
Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);
actionBarToolBar.setNavigationIcon(R.drawable.icon);
actionBarToolBar.setNavigationContextDescription(getResources().getString(R.string.desc);
actionBarToolBar.setLogo(R.drawable.other_icon);
actionBarToolBar.setLogoDescription(getResources().getString(R.string.other_desc);
actionBarToolBar.inflateMenu(R.menu.fragment_menu);
Run Code Online (Sandbox Code Playgroud)
Pra*_*pta 20
最好的方法:
1.在Activity中查找工具栏并将其设置为supportActionBar.
Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);
Run Code Online (Sandbox Code Playgroud)
2.然后,在同一个Activity上处理不同片段的选项菜单将是一块蛋糕.根据需要在每个片段中执行以下操作:
在OnCreateView方法调用中
setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)
最后,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
要管理菜单项单击,我们有onOptionsItemSelected:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search :
Log.i("item id ", item.getItemId() + "");
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
Gui*_*ume 17
最简单的选择是做
toolbar.inflateMenu(R.menu.fragment_menu);
Run Code Online (Sandbox Code Playgroud)
和处理单击菜单项
toolbar.setOnMenuItemClickListener {
when (it.itemId) {
R.id.nav_example -> doThat()
}
true
}
Run Code Online (Sandbox Code Playgroud)
onCreateOptionsMenu在每个片段中覆盖方法.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我正确解决了这个问题。我的解决方案如下代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mRootView = inflater.inflate(R.layout.fragment_order_history, container, false);
//getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
return mRootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,我想根据显示的片段替换工具栏菜单。
我现在面临的问题是菜单被添加到了上一个菜单。
为了仅显示片段的菜单,我建议:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear(); //Empty the old menu
inflater.inflate(R.menu.menu_fragment1, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
希望它会有所帮助。
| 归档时间: |
|
| 查看次数: |
64348 次 |
| 最近记录: |