Android的抽屉式导航栏显示指标的下层碎片 [英] Android Navigation Drawer Show Up Indicator for Lower Level Fragments

查看:187
本文介绍了Android的抽屉式导航栏显示指标的下层碎片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些问题交换抽屉式导航功能,最多功能的较低的水平片段。我已阅读<一个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.

我有三个层次:

  1. MainActivity 与抽屉式导航,它由家庭和个人资料的项目
  2. UserFragment 标题为个人资料,有一个选择项会弹出 EditUserFragment
  3. EditUserFragment (较低的水平片段)被触发的 UserFragment
  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());
}

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 。如果有人知道这个问题的答案,请随时发表评论!

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屋!

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