我想从片段设置活动倾斜和菜单, (下面的代码运行良好,但我正在寻找更好的实现)
在第一步中,我创建了一个interface
public interface IGetDetails {
public String getTitle();
public int getMenu();
}
每个片段实现此接口
例如
public class TestFragment extends Fragment implements IGetDetails {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.tes, null);
}
@Override
public String getTitle() {
return "test Title";
}
@Override
public int getMenu() {
return R.menu.test;
}
}
活动 我用堆栈来记录碎片
Stack<Fragment> fragmentStack=new Stack<>();
当用户从一个片段导航到另一个片段时,我将新片段添加到stack.example
currentFragment=new TestFragment();
fragmentStack.push(currentFragment);
fragmentTransaction.add(R.id.bodyFragment, currentFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
invalidateOptionsMenu();
setTitle();
onBackpressed
中的
public void onBackPressed() {
if(getSupportFragmentManager().getBackStackEntryCount()>0){
FragmentManager manager =getSupportFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove( fragmentStack.pop());
trans.commit();
manager.popBackStack();
currentFragment=fragmentStack.lastElement();
setTitle();
invalidateOptionsMenu();
}else{
super.onBackPressed();
}
}
活动中的 setTitle
方法
public void setTitle() {
IGetDetails fragment = (IGetDetails) currentFragment;
if (fragment != null) {
String title = fragment.getTitle();
if (title == null || title.equals("")) {
setTitle(getString(R.string.app_name));
} else {
setTitle(title);
}
}
}
答案 0 :(得分:0)
只需覆盖Fragment Class中的onAttach和onDetach()。
代表前 -
@Override
public void onDetach() {
// TODO Auto-generated method stub
super.onDetach();
getActionBar().setTitle("My Account");
}
答案 1 :(得分:0)
对于菜单你的片段必须打电话 setHasOptionsMenu(真) 在它的onCreate方法。
然后只需覆盖onCreateOptionsMenu
和onOptionsItemSelected
即可填充菜单并收听点击次数。
要使用getActivity().setTitle()
设置标题,请使用onActivityCreated
方法:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().setTitle("My Fragment Title");
}
注意:这仅适用于API&gt; = 11
答案 2 :(得分:0)
对于标题,您需要在onStart()
中设置标题:
@Override
public void onStart() {
super.onStart();
((FragmentActivity)getActivity()).setTitle();
}
}
由于每次加载片段时都会调用onStart()
,因此您将始终显示当前显示片段的标题。
加载片段的选项菜单:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//if using fragments from support library
((FragmentActivity)getActivity()).setTitle();
//otherwise
getActivity().setTitle();
}
}
现在覆盖onCreateOptionsMenu()
并加载要在那里显示的菜单。当Android为您提供适当的解决方案时,无需解决方法。
答案 3 :(得分:0)
用于设置当前片段的标题。
currentFragment=new TestFragment();
...
setTitle(currentFragment.getTitle());
您只需要在setTitle()体中进行修改以更好地实现它:
public void setTitle(String title) {
getActivity().setTitle(title);
}
对于菜单选项更改,您调用 invalidateOptionsMenu(),它将调用 onPrepareOptionsMenu(),并且您的R.menu.menu将被设置。
在这种情况下无需修改