我有一个片段,我尝试更改操作栏的标题。这一直有效,直到我将setHasOptionsMenu(true)
添加到片段中。
我怎么解决这个问题?因为我需要片段中的optionsmenu
。
片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
((MainActivity)getActivity()).setActionBarTitle(getString(R.string.title_view_tree));
setHasOptionsMenu(true);
return inflater.inflate(R.layout.fragment_view_tree, container, false);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_view_tree,menu);
super.onCreateOptionsMenu(menu,inflater);
}
在MainActivity中:
public void setActionBarTitle(String title) {
getSupportActionBar().setTitle(title);
}
当我使用setHasOptionsMenu(true)
停用//
时,actionbar
的标题会正确更改。
答案 0 :(得分:6)
从Fragment的 onCreateOptionMenu 调用setActionBarTitle。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_main4, menu);
((MainActivity)getActivity()).setActionBarTitle(getString(R.string.title_view_tree));
super.onCreateOptionsMenu(menu, inflater);
}
我建议使用回调接口与活动进行交互。
答案 1 :(得分:1)
进行以下更改以处理片段中的“标题”和“菜单”
public class YourFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_xml_contents, container, false);
((HostedActivity) getActivity()).setFragmentTitle(getActivity().getString(R.string.frag_title));
setHasOptionsMenu(true);
.....
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.profile_menu_xml, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_edit:
//....... action for menu item
return false;
default:
break;
}
return false;
}
}
答案 2 :(得分:0)
在您要为其设置标题的片段中: 只需致电
getActivity()。setTitle(“ Fragment X”);
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getActivity().setTitle("Fragment X");
}
答案 3 :(得分:0)
在片段的onCreate方法而不是onCreateView中设置setHasOptionsMenu并在onCreateView方法中设置标题:-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
((MainActivity)getActivity()).setActionBarTitle(getString(R.string.title_view_tree));
return inflater.inflate(R.layout.fragment_view_tree, container, false);
}
答案 4 :(得分:0)
您可以直接从片段中设置标题,而不必从活动中设置标题。
请参考以下代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
getActivity().setTitle("Fragment name");
setHasOptionsMenu(true);
return inflater.inflate(R.layout.fragment_fragment_example, container, false);
}
答案 5 :(得分:0)
更改操作栏标题,将以下代码添加到Activity的onCreate()
getActionBar()。setTitle(“ title”);
答案 6 :(得分:0)
有一个称为MainActivity的活动,其中包含三个片段。
现在,MainActivity有
Fragment One
Fragment Two
Fragment Three
让我们说说,在更改任何片段时,我们要更改操作栏标题。
这可以通过在包含这些片段的活动中实现FragmentManager.OnBackStackChangedListener来完成。
在重写onBackStackChanged方法时,我们可以根据需要轻松更改标题和其他内容。
@Override
public void onBackStackChanged() {
try {
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
if (fragment != null && fragment.isVisible()) {
if (fragment.getTag().equals(AddNewProductSelectAttributeFragment.class.getSimpleName())) {
setTitle(getString(R.string.select_attribute_and_product_type));
} else if (fragment.getTag().equals(AddSimpleProductFragment.class.getSimpleName())) {
setTitle(getString(R.string.add_simple_product));
} else if (fragment.getTag().equals(AddNewProductCategoryFragment.class.getSimpleName())) {
setTitle(getString(R.string.select_categories));
} else if (fragment.getTag().equals(AddCustomOptionFragment.class.getSimpleName())) {
setTitle(getString(R.string.add_custom_options));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
答案 7 :(得分:0)
解决方案很简单,只需转到Res-导航-mobile_navigation ... 在里面,您可以找到以下片段的行:标签,并根据需要设置标题。
答案 8 :(得分:0)
我在 XML 文件中设置了片段的标签,如下所示:android:label="Title"
并且它使 get Activity.setTitle("Title")
代码不起作用,因此当我删除该行时,它会使用 java 更改标题代码。