2

Я создал ящик навигации с одним действием и несколькими фрагментами, такими как frag a, frag b, frag c, ... Если я нажму кнопку «Назад» в фрагменте c, он должен прийти к frag a. Проблема в том, что обратная операция не работает. Может ли кто-нибудь сказать мне, как это сделать в приведенном ниже коде?Обратная кнопка в фрагменте Navigationdrawer

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"); 
    } 
} 
+0

фрагмент из добавленных вместо заменить – iAndroid

ответ

0

Изменение этой линии

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

к этому

addToBackStack работает с add.

Функция удаляет предыдущий фрагмент и помещает новый фрагмент, поэтому на вашем заднем стеке остается только один фрагмент. Поэтому используйте функцию добавления, чтобы сохранить предыдущие фрагменты в стеке.

+0

Если я кладу добавить его будет back..then Главный фрагмент будет display..If вас снова нажмите кнопку назад .. приложение не существует .. отображает FrameLayout – Kingraj

0

Это должно сделать трюк

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

если нет, то посмотрите на how to implement your own backstack

надеюсь, что это помогает :)

+0

при выполнении операции ... если вы пришли из последнего фрагмента в исходный фрагмент ... в панели действий первого фрагмента его показывается последний фрагмент заголовка – Kingraj

+0

@Kingraj вы можете изменить заголовок Actionbar из фрагмента byA ((MainFragmentActivity) getActivity()). setActionBarTitle (YOUR_TITLE); ' –

+0

Если вы хотите, чтобы вы меняли его из своей активности, используйте это' ge tSupportActionBar(). setTitle (заголовок); ' –

0

// место этот код в ваш 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> 
+0

который id этого идентификатора == R.id.job – Kingraj

+0

это идентификатор элемента навигации

<группа андроид: checkableBehavior = "сингл"> <элемент андроид: идентификатор = "@ + идентификатор/работа" андроида: значок = "@ вытяжка/ic_menu_manage" андроида: название = "Работа сообщения" />

 Смежные вопросы

  • Нет связанных вопросов^_^