我有一些问题,需要将导航抽屉功能切换到更低级别的片段。我已经阅读了这个主题以显示向上指示器。但是当按下按钮时,它会打开导航抽屉而不是返回到上一个片段。我无法在EditUserFragment中设置操作栏标题为“编辑个人资料”。
我正在使用Android Studio中提供的导航抽屉模板。
我有三个级别:
1.带有Home和Profile项目的导航抽屉的MainActivity 2.标题为“Profile”的UserFragment,其中包含一个选项,可以弹出EditUserFragment 3.UserFragment触发较低级别的EditUserFragment
MainActivity
我想要实现的是能够通过点击上方指示器(当前该指示器正在打开导航抽屉)从
我正在使用Android Studio中提供的导航抽屉模板。
我有三个级别:
1.带有Home和Profile项目的导航抽屉的MainActivity 2.标题为“Profile”的UserFragment,其中包含一个选项,可以弹出EditUserFragment 3.UserFragment触发较低级别的EditUserFragment
MainActivity
@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(), drawerLayout,
R.drawable.ic_launcher, R.string.navigation_drawer_open,
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);
}
}
编辑用户碎片
@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(true);
按预期工作,向上的小三角显示而不是抽屉;但是当点击它时,它会打开抽屉而不是返回到先前的片段。此外,在case android.R.id.home
下的代码从未执行。
我尝试将操作栏标题从“Profile”更改为“Edit Profile”。日志向我显示“Edit Profile”,但实际运行的应用程序出于某种原因向我显示“Profile”。
我想要实现的是能够通过点击上方指示器(当前该指示器正在打开导航抽屉)从
EditUserFragment
返回到UserFragment
,并在EditUserFragment
中显示正确的标题。
非常感谢您的帮助!
MainActivity
中拥有一个公共函数,以便从较低级别的片段重置你的操作栏。 在该函数中,你需要执行以下操作:mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
当你想要显示插入符号时,从你的片段调用该函数即可。 - Lancelot