如何让工具栏从碎片?

我有与NavigationDrawer ActionBarActivity和使用support_v7 Toolbar作为ActionBar。 在我的一个片段工具栏中有自定义视图。 在其他片段Toolbar应显示标题。

如何让Toolbar实例从碎片定制? 我可以通过getActivity().getActionBar()获得ActionBar,但是如果我为这个实例的ActionBar调用setTitle() ,它什么也不做。

UPD:

在我的情况

((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();

(正如MrEngineer13所说)在第一个片段创build时不工作,因为我从onHiddenChanged()调用它。 现在我添加更多的onCreateView(),它工作正常。

您需要先将您的活动从getActivity()AppCompatActivity 。 这是一个例子:

 ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(); 

你必须转换它的原因是因为getActivity()返回一个FragmentActivity ,你需要一个AppCompatActivity

如果片段应该有工具栏的自定义视图,您可以分别为每个片段实施工具栏。

将工具栏添加到fragment_layout中:

 <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="wrap_content" android:background="?attr/colorPrimaryDark"/> 

在片段中find它:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment, container, false); Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); //set toolbar appearance toolbar.setBackground(R.color.material_blue_grey_800); //for crate home button AppCompatActivity activity = (AppCompatActivity) getActivity(); activity.setSupportActionBar(toolbar); activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); } 

菜单侦听器可以创build两种方式:覆盖onOptionsItemSelected在你的片段:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case android.R.id.home: getActivity().onBackPressed(); } return super.onOptionsItemSelected(item); } 

或者在onCreateView()中创build工具栏时设置监听器:

 toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { return false; } }); 

你有两个select来获取工具栏的片段

第一

 Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 

和第二个

 Toolbar toolbar = ((MainActivity) getActivity()).mToolbar; 
 toolbar = (Toolbar) getView().findViewById(R.id.toolbar); AppCompatActivity activity = (AppCompatActivity) getActivity(); activity.setSupportActionBar(toolbar); 

也许你必须尝试getActivity().getSupportActionBar().setTitle()如果你使用的是support_v7。

从你的片段:(从工具栏获取片段?)

 // get toolbar ((MainAcivity)this.getActivity()).getToolbar(); // getToolbar will be method in Activity that returns Toolbar!! don't use getSupportActionBar for getting toolbar!! // get action bar this.getActivity().getSupportActionBar(); 

当您在工具栏中使用微调器并从工具栏中调用微调器或自定义视图时,这是非常有用的!

从你的活动:

 // get toolbar this.getToolbar(); // get Action Bar this.getSupportActionBar(); 

你可以在你的Activity类中为此创build一个方法:

 public void setToolbarTitle(String title) { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(title); } 

你可以这样使用:

 setToolbarTitle("Hello World");