Reputation: 3982
I want to use android v7.toolbar in my project with fragments. So i did something like below in my main activity xml. Because i dont want to add all fragments xml to android.support.v7.widget.Toolbar
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:id="@+id/toolBar" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container">
</FrameLayout>
</LinearLayout>
i am adding fragments with programmatically. And in some fragments i have to change right side of the toolbar. For example in some fragments i have to use just 1 right menu icon and another fragments 2. How can i achieve it?
Also is there a way to change icon resource which is in right side of the toolbar from fragments?
Thanks,
Upvotes: 0
Views: 2719
Reputation: 228
You can create menu.xml
and put all your menu items in it. Set all the items visibility
to false
. This hides everything.
Then in your fragment's onCreate
set setHasOptionsMenu(true)
, this will allow you to override onCreateOptionsMenu(Menu m, MenuInflater inflater)
.
In this method you can do menu.findItem(id.of.item).setVisible(true/false)
.
Examples:
menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.sample.app.MainActivity">
<item
android:id="@+id/action_refresh"
android:icon="@drawable/ic_action_refresh"
android:orderInCategory="101"
app:showAsAction="ifRoom"
android:title="@string/action_refresh"
android:visible="false"/>
<item
android:id="@+id/action_edit_account"
android:icon="@drawable/ic_action_edit"
android:orderInCategory="102"
app:showAsAction="never"
android:title="@string/action_edit_account"
android:visible="false"/>
<item
android:id="@+id/action_enable_offline_token"
android:orderInCategory="105"
app:showAsAction="never"
android:title="@string/action_enable_offline_token"
android:visible="false"/>
<item
android:id="@+id/action_disable_offline_token"
android:orderInCategory="105"
app:showAsAction="never"
android:title="@string/action_disable_offline_token"
android:visible="false"/>
<item
android:id="@+id/action_save"
android:icon="@drawable/ic_action_save"
android:orderInCategory="106"
app:showAsAction="ifRoom"
android:title="@string/action_save"
android:visible="false"/>
</menu>
Fragment:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
menu.findItem(R.id.action_refresh).setVisible(false);
menu.findItem(R.id.action_save).setVisible(true);
}
To change icons you can just get the menu and do a findItem and setIcon.
Upvotes: 3