我正在使用Android Studio中提供的导航栏模板.
我有三个层次:
> MainActivity与导航抽屉,由Home和Profile项目组成
> UserFragment标题为“配置文件”,该选项可以显示EditUserFragment
> EditUserFragment(下级片段)由UserFragment触发
主要活动
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerToggle = new ActionBarDrawerToggle(this,drawerLayout,R.drawable.ic_launcher,R.string.navigation_drawer_open,R.string.navigation_drawer_close); } @Override public void onBackpressed() { super.onBackpressed(); // this won't change the drawer indicator back drawerToggle.setDrawerIndicatorEnabled(true); // this works drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); } public void onSectionAttached(int number) { // Show the corresponding title on the action bar when clicked and open corresponding // fragments. Fragment fragment = null; switch (number) { case 1: mTitle = getString(R.string.title_home); break; case 2: mTitle = getString(R.string.title_profile); fragment = new UserFragment(); break; } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.container,fragment).commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { if (!mNavigationDrawerFragment.isDraweropen()) { // Only show items in the action bar relevant to this screen // if the drawer is not showing. Otherwise,let the drawer // decide what to show in the action bar. getMenuInflater().inflate(R.menu.main,menu); restoreActionBar(); return true; } return super.onCreateOptionsMenu(menu); } public void restoreActionBar() { ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setTitle(mTitle); } public void setActionBarTitle(String title){ getActionBar().setTitle(title); Log.d("Title 2",getActionBar().getTitle().toString()); }
当我按下手机按钮(操作栏上没有按钮)时,onBackpressed正在部分工作(在代码中注释).
UserFragment
@Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { setHasOptionsMenu(true); // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_profile,container,false); drawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); drawerToggle = new ActionBarDrawerToggle(getActivity(),R.string.navigation_drawer_close); return view; } @Override public boolean onoptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_edit: drawerToggle.setDrawerIndicatorEnabled(false); // disable sliding from edge to open drawer drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); getFragmentManager().beginTransaction() .replace(R.id.container,new EditUserFragment()) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) .addToBackStack(null) .commit(); return true; default: return super.onoptionsItemSelected(item); } }
EditUserFragment
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); getActivity().getActionBar().setdisplayHomeAsUpEnabled(true); ((MainActivity) getActivity()).setActionBarTitle("Edit Profile"); Log.d("Title",getActivity().getActionBar().getTitle().toString()); } @Override public boolean onoptionsItemSelected(MenuItem item) { // Get item selected and deal with it Log.d("KEY: ",String.valueOf(item.getItemId())); switch (item.getItemId()) { case android.R.id.home: Log.d("EditUserFragment","I'm here"); getActivity().onBackpressed(); return true; default: return super.onoptionsItemSelected(item); } }
.getActivity()getActionBar()setdisplayHomeAsUpEnabled(真).按照预期的方式工作,而不是抽屉;虽然点击它,它开放抽屉,而不是回到以前的片段.另外,case android.R.id.home中的代码从不执行.
并且我尝试从“配置文件”将操作栏标题设置为“编辑配置文件”.日志显示我“编辑个人资料”,但由于某些原因,实际运行的应用程序会显示“配置文件”.
我想要实现的是可以通过点击up指示器从EditUserFragment返回到UserFragment(现在up指示器打开导航栏).并在EditUserFragment中显示正确的标题.
任何帮助是极大的赞赏!!
解决方法
主角,MainActivty调用NavigationDrawerFragment来设置导航栏所需的所有内容.我通过在MainActivity中实现导航抽屉来解决这个问题,所以我只有一个drawerToggle.虽然如果我在NavigationDrawerFragment中有所有的东西(导航栏的变量),而不是MainActivity,我仍然找不到办法让它工作.如果有人知道答案,请随意留言!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。