Android的抽屉式导航栏显示指标的下层碎片 [英] Android Navigation Drawer Show Up Indicator for Lower Level Fragments
问题描述
我有一些问题交换抽屉式导航功能,最多功能的较低的水平片段。我已阅读<一个href="http://stackoverflow.com/questions/17258020/switching-between-android-navigation-drawer-image-and-up-caret-when-using-fragme">this螺纹管理,显示了指标。但是,当pressing按钮,它会打开,而不是回到previous片段了抽屉式导航。我不能设置操作栏标题中的 EditUserFragment 以编辑个人资料。 我使用的是Android中Studio中可用的导航抽屉的模板。
I have some issues switching navigation drawer functionality to up functionality at lower level fragment. I have read this thread to manage to show the up indicator. But when pressing the button, it'll open up the navigation drawer instead of going back to previous fragment. And I can't set action bar title in EditUserFragment to "Edit Profile". I'm using the navigation drawer template available in Android Studio.
我有三个层次:
- MainActivity 与抽屉式导航,它由家庭和个人资料的项目
- UserFragment 标题为个人资料,有一个选择项会弹出 EditUserFragment
- EditUserFragment (较低的水平片段)被触发的 UserFragment
- MainActivity with navigation drawer that consists of Home and Profile items
- UserFragment titled with "Profile" that has an option item that'll bring up EditUserFragment
- EditUserFragment (lower level fragment) is triggered by UserFragment
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());
}
onBack pressed
正在部分地(在code评论)当我pressed后退按钮在电话上(操作栏不起来按钮)
onBackPressed
is working partially (commented in code) when I pressed back button on phone (not up button on action bar).
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);
}
}
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(真);
运行正常,截至插入符正显示出代替抽屉;虽然攻的时候,它对外开放抽屉里,而不是要回previous片段。此外,永远不会执行下情况下android.R.id.home
的code。
我尝试设置操作栏的标题从档案编辑个人资料。该日志显示我的编辑个人资料,但实际运行的应用程序显示我的个人资料出于某种原因。
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
works as expected that up caret is showing instead of drawer; though when tapping it, it's opening up drawer instead of going back to previous fragment. In addition, the code under case android.R.id.home
is never executed.
And I try to set action bar title to "Edit Profile" from "Profile". The log shows me "Edit Profile", but the actual running app shows me "Profile" for some reason.
我想实现的是能够回到 UserFragment
从 EditUserFragment
点击向上指示灯(现在向上指示灯开放抽屉式导航)。而显示正确的标题 EditUserFragment
。
What I want to achieve is be able to go back to UserFragment
from EditUserFragment
by tapping the up indicator (right now the up indicator is opening up navigation drawer). And show correct title in EditUserFragment
.
任何帮助是极大AP preciated !!
Any help is greatly appreciated!!
推荐答案
在分析的时候,我发现这个问题是我现在用的是创造它时,内置的导航抽屉的活动。内置的分离任务分为二。 MainActivity
和 NavigationDrawerFragment
。因此, drawerToggle
我在 MainActivity
是不一样的现实之一 NavigationDrawerFragment
。
After days of analyzing, I discovered that the problem is I am using the built-in navigation drawer activity when creating it. The built-in separate the tasks into two. MainActivity
and NavigationDrawerFragment
. Thus, the drawerToggle
I have in MainActivity
is not the same as the real one in NavigationDrawerFragment
.
Oroginally, MainActivty
电话 NavigationDrawerFragment
来设置所有需要的导航抽屉的东西。我的解决通过实现导航抽屉里我的 MainActivity
,所以我只有一个 drawerToggle
。不过,我仍然无法找到,使其工作,如果我拥有了一切(导航抽屉变量)的 NavigationDrawerFragment
,而不是 MainActivity 路code>。如果有人知道这个问题的答案,请随时发表评论!
Oroginally, MainActivty
calls NavigationDrawerFragment
to setup all the things needed for navigation drawer. I SOLVED this by implementing navigation drawer in my MainActivity
, so I'll have only one drawerToggle
. Though, I still can't find the way to make it work if I have everything (the navigation drawer variables) in NavigationDrawerFragment
rather than MainActivity
. If anyone knows the answer to that, feel free to leave a comment!
这篇关于Android的抽屉式导航栏显示指标的下层碎片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!