【问题标题】:back button in Navigationdrawer fragment导航抽屉片段中的后退按钮
【发布时间】:2016-07-20 11:40:49
【问题描述】:

我创建了一个导航抽屉,其中包含一个活动和多个片段,如片段 a、片段 b、片段 c……如果我单击片段 c 中的后退按钮,它应该会出现片段 a。问题是返回操作不起作用。谁能告诉我如何在下面的代码中做到这一点?

private void displayView(int position) {
    Fragment fragment=null;

    switch (position) {
        case 0:
            fragment = new FragmentA();
            break;
        case 1:
            fragment = new FragmentB();
            break;
        case 2:
            fragment = new FragmentC();
        default:
            break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                 .replace(R.id.frame_content, fragment)
                .addToBackStack(null)
                .commit();
        menulistView.setItemChecked(position, true);
        menulistView.setSelection(position);
        setTitle(navMenuTitles[position]);
    } else {
        Log.e("MainActivity", "Error");
    }
}

【问题讨论】:

  • 添加片段而不是替换

标签: java android android-fragments navigation-drawer onbackpressed


【解决方案1】:

改变这一行

fragmentManager.beginTransaction()
                 .replace(R.id.frame_content, fragment)
                .addToBackStack(null)
                .commit();

到这里

fragmentManager.beginTransaction()
                 .add(R.id.frame_content, fragment)
                .addToBackStack(null)
                .commit();

addToBackStack 适用于add

replace 函数删除前一个片段并放置新片段,因此在您的后台堆栈中始终只有一个片段。所以使用 add 函数将之前的片段保留在堆栈中。

【讨论】:

  • 如果我把它添加回去..然后主片段将显示..如果你再次点击返回按钮..app 不存在..它显示 FrameLayout
【解决方案2】:

这应该可以解决问题

public void onBackPressed()
{
    FragmentManager fm = getActivity().getSupportFragmentManager();
    fm.popBackStack();
}

如果没有,请查看how to implement your own backstack

希望这会有所帮助:)

【讨论】:

  • 返回操作时...如果您从最后一个片段到主片段...在第一个片段操作栏中显示最后一个片段标题
  • @Kingraj 您可以通过((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE); 将您的操作栏标题从片段更改为
  • 如果你想从你的活动中改变它,使用这个getSupportActionBar().setTitle(title);
  • 在片段中我应该在哪里添加这个...((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);
  • onCreateView 方法中
【解决方案3】:

//把这段代码放在你的MainActivity中

@SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        Fragment fragment;
        int id = item.getItemId();
       // String title = getString(R.string.app_name);

        if (id == R.id.register) {
            fragment=new Register();
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.mainframe,fragment);
            ft.addToBackStack(null);
            ft.commit();
         //   title="Proviso Intech :: Registration";


        } else if (id == R.id.job) {
            fragment=new job();
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.mainframe,fragment);
            ft.addToBackStack(null);
            ft.commit();
          //  title="Proviso Intech :: Job Search";

        }
        else if(id==R.id.home){
            fragment=new home();
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.mainframe,fragment);
            ft.addToBackStack(null);
            ft.commit();
         //   title="Proviso Intech :: Home";


        }
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

这是我的 content_main.xml

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:id="@+id/main"

    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.intech.proviso.proviso.MainActivity"
    tools:showIn="@layout/app_bar_main">


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/mainframe"></FrameLayout>
</RelativeLayout>

//这里是activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"

    >

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/home"
            android:icon="@drawable/common_full_open_on_phone"
            android:checkable="true"
            android:title="Home" />
        <item
            android:id="@+id/register"
            android:icon="@drawable/ic_menu_send"
            android:title="Register" />
        <item
            android:id="@+id/job"
            android:icon="@drawable/ic_menu_manage"
            android:title="Job Posts" />


    </group></menu>

【讨论】:

  • which id this id==R.id.job
  • 这是导航项的id schemas.android.com/apk/res/android" >
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2020-12-20
  • 2014-02-01
  • 2015-07-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多