我有一些问题切换导航抽屉功能到较低级别片段上的功能。我读了这个线程来显示向上的指示器。但当按下按钮时,它将打开导航抽屉,而不是回到以前的片段。并且我不能将EditUserFragment中的操作栏标题设置为“编辑配置文件”。我正在使用Android Studio中提供的导航抽屉模板。
我有三个层次:
@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
正在部分工作(在代码中注释)。
用户碎片
@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);
}
}
我想要实现的是能够通过点击向上指示器(现在向上指示器打开了导航抽屉)从edituserfragment
返回到userfragment
。并在edituserfragment
中显示正确的标题。
非常感谢任何帮助!!
经过几天的分析,我发现问题是我在创建时使用了内置的导航抽屉活动。内置将任务分成两个。MainActivity
和NavigationDrawerFragment
。因此,我在mainactivity
中的drawertoggle
与在navigationdrawerfragment
中的真正的drawertoggle不同。
通常,mainactivy
调用navigationdrawerfragment
来设置导航抽屉所需的所有内容。我通过在我的mainactivity
中实现导航抽屉来解决这一问题,因此我只有一个drawertoggle
。但是,如果在navigationdrawerfragment
而不是mainactivity
中包含所有内容(导航抽屉变量),我仍然无法找到使其工作的方法。如果有人知道答案,欢迎留言!
在阅读了关于片段和活动的文档和讨论后,我想我已经把情况弄清楚了。 活动应该为用户提供一个屏幕,用户可以在其中工作。导航到其他屏幕通常会破坏活动。 片段应该提供很少或单个功能组件,可以在活动中再次使用。片段的内容应该相互独立地工作,因此可以在多个活动中重用。 虽然这一切似乎都有道理,但有一件事我无法理解: 如果您创建一个新的Android应用程序,并选择创建Android导航抽屉应用程序的选项,为什
我已经在我的项目中添加了一个导航抽屉活动,并尝试将项目作为片段添加。这就是我在主要活动中所做的。 默认片段是Home,它工作正常,正如预期的那样,但其他片段与Home片段重叠。(HomeFragment是唯一工作正常的)。我在每个片段类中都做过这样的事情: 我看不出错误在哪里。一切看起来都很好,但所有其他片段都显示在HomeFragment上。
我有一个关于片段管理的问题。 我已经编写了一个基于碎片的抽屉活动。每次点击菜单项后,您都会看到一个空片段。 我如何实现这一点?
我已将导航抽屉连接到我的应用程序的主
我正在为我的应用程序实现一个导航抽屉。现在,除了一个小故障外,它工作正常。当我设置导航抽屉图标(ic_Drawer)来替换常规的“HomeAsUp”插入符号图标时,我仍然得到箭头。导航抽屉图标不显示。我已经实现了android开发者网站上的每一种方法。但它似乎不起作用。 以下是我的代码:
我开始创建一个应用程序,它使用一个活动(导航抽屉)和许多片段。但我无法使用工具栏上的“后退”按钮从片段中导航回来。硬件后退按钮工作正常。我知道我需要覆盖选项ItemSelected,捕捉android。R、 id.home,检查后堆栈中是否有内容,然后弹出它。在更改片段后,“burger”按钮变为“back arrow”,但当我单击它时,选项ItemSelected将打开NavigationDra