Android Navigation Drawer Show Up Indicator for Lower Level Fragments [英] Android Navigation Drawer Show Up Indicator for Lower Level Fragments

查看:27
本文介绍了Android Navigation Drawer Show Up Indicator for Lower Level Fragments的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在低级片段将导航抽屉功能切换为向上功能时遇到了一些问题.我已阅读 此线程 设法显示向上指示器.但是当按下按钮时,它会打开导航抽屉而不是返回到上一个片段.而且我无法将 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.

我有三个级别:

  1. MainActivity 带有由 Home 和 Profile 项组成的导航抽屉
  2. UserFragment 标题为配置文件",其中包含一个选项项,会弹出 EditUserFragment
  3. EditUserFragment(低级片段)由UserFragment
  4. 触发
  1. MainActivity with navigation drawer that consists of Home and Profile items
  2. UserFragment titled with "Profile" that has an option item that'll bring up EditUserFragment
  3. 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());
}

onBackPressed 在我按下手机上的返回按钮(不是操作栏上的向上按钮)时部分工作(在代码中注释).

onBackPressed is working partially (commented in code) when I pressed back button on phone (not up button on action bar).

用户片段

@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 下的代码永远不会被执行.我尝试将操作栏标题设置为个人资料"中的编辑个人资料".日志显示编辑配置文件",但实际运行的应用程序出于某种原因显示配置文件".

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.

我想要实现的是能够通过点击向上指示器(现在向上指示器正在打开导航抽屉)从 EditUserFragment 返回到 UserFragment.并在 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.

非常感谢任何帮助!

推荐答案

经过几天的分析,我发现问题是我在创建它时使用了内置的导航抽屉活动.内置将任务分成两个.MainActivityNavigationDrawerFragment.因此,我在 MainActivity 中的 drawerToggleNavigationDrawerFragment 中的真正的不一样.

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.

最初,MainActivty 调用 NavigationDrawerFragment 来设置导航抽屉所需的所有内容.我通过在我的 MainActivity 中实现抽屉式导航解决了这个问题,所以我只有一个 drawerToggle.但是,如果我在 NavigationDrawerFragment 而不是 MainActivity 中拥有所有内容(导航抽屉变量),我仍然无法找到使其工作的方法.如果有人知道这个问题的答案,请随时发表评论!

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 Navigation Drawer Show Up Indicator for Lower Level Fragments的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆