Lan*_*lot 11 navigation android navigation-drawer
我有一些问题将导航抽屉功能切换到较低级别片段的向上功能.我已阅读此主题以设法显示向上指示器.但是当按下按钮时,它会打开导航抽屉,而不是回到之前的片段.我无法在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());
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);按预期工作,插入符号显示而不是抽屉; 虽然点击它时,它打开抽屉而不是回到之前的片段.此外,case android.R.id.home永远不会执行下面的代码.我尝试将操作栏标题设置为"配置文件"中的"编辑配置文件".日志显示"编辑配置文件",但实际运行的应用程序由于某种原因显示"配置文件".
我想实现的是能够回去UserFragment从EditUserFragment点击向上指示器(现在向上指示灯开放抽屉式导航栏).并显示正确的标题EditUserFragment.
任何帮助是极大的赞赏!!
经过几天的分析,我发现问题是我在创建它时使用了内置的导航抽屉活动。内置将任务分成两部分。MainActivity和NavigationDrawerFragment。因此,drawerToggle中的 IMainActivity与 中的真实值并不相同NavigationDrawerFragment。
最初,MainActivty调用NavigationDrawerFragment来设置导航抽屉所需的所有内容。我通过在我的 中实现导航抽屉解决了MainActivity这个问题,所以我只有一个drawerToggle。不过,如果我将所有内容(导航抽屉变量)放在而NavigationDrawerFragment不是MainActivity. 如果有人知道答案,请随时发表评论!
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |