2015-07-16 6 views
1

Когда я нажимаю кнопку возврата, получая фрагмент пустым. Не вернуть предыдущий фрагмент. Пробовал много решений, но не работал. Какое решение для этого? Я не знаю, как это решить.Получение пустого фрагмента после popbackstack

private void displayView(int position) { 
    Fragment fragment = null; 
    switch (position) { 
    case 0: 
     fragment = mHomeFragmentInstance; 
     break; 
    case 1: 
     fragment = mOrderFragmentInstance; 
     break; 
    case 2: 
     fragment = mOrdersheetFragmentInstance; 
     break; 
    case 3: 
     fragment = mMyorderwidgetFragmentInstance; 
     break; 
    case 4: 
     Intent intent=new Intent(this,LoginActivity.class); 
     startActivity(intent); 
     clearValues(); 
     finish(); 
     return; 
    default: 
     fragment = mHomeFragmentInstance; 
     break; 
    } 

    if (fragment != null) { 
     replaceFragment(fragment, position); 
    } 

} 


/** 
* When using the ActionBarDrawerToggle, you must call it during 
* onPostCreate() and onConfigurationChanged()... 
*/ 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

public void replaceFragment(Fragment fragment){  
    if (fragment != null) { 
     Fragment currentFragment = this.getSupportFragmentManager().findFragmentById(R.id.frame_container); 
     if(null != currentFragment){ 
      if(currentFragment.equals(fragment)){ 
       return; 
      }else{ 
       getSupportFragmentManager().beginTransaction().remove(currentFragment).commit(); 
      } 
     } 

     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.frame_container, fragment); 
     ft.addToBackStack(null); 
     ft.commit(); 

    } else { 
     // error in creating fragment 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 
} 

public void replaceFragment(Fragment fragment, int position){ 
    adapter.selectItem(position); 
    Log.i("TAG", "replaceFragment:"+fragment.getClass().getName()+":"+position); 
    replaceFragment(fragment); 
    Log.i("TAG", "Add"+fragment.getClass().getName()+"backStackFragment"); 

    if(fragment.equals(mHomeFragmentInstance)){ 
     Log.i("TAG", "clear backStackFragment"); 
     backStackFragment.clear(); 
     backStackFragment.add(mHomeFragmentInstance); 
    } 

    mDrawerList.setItemChecked(position, true); 
    mDrawerList.setSelection(position); 
    setTitle(navMenuTitles[position]); 
    mDrawerLayout.closeDrawer(drawerContainer); 
} 


@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    //getActionBar().setTitle(Html.fromHtml("<font color='#983A1B'>" + title + "</font>")); 
    View view = getActionBar().getCustomView(); 
    //((TextView)view.findViewById(R.id.title)).setText(Html.fromHtml("<font color='#983A1B'>" + title + "</font>")); 
    ((TextView)view.findViewById(R.id.title)).setText(Html.fromHtml("<font color='"+ ApplicationInfo.getPlfColor(this)+"'>" + title + "</font>")); 
} 

@Override 
public void onBackPressed() { 
    FragmentManager fm = getSupportFragmentManager(); 
    if(fm.getBackStackEntryCount() > 1) { 
     fm.popBackStack(); 
    }else { 
     //super.onBackPressed(); 
     finish(); 
    } 
} 

} 
+0

Напишите метод onBackPressed() и покажите, что вы хотите. это метод активности. или переопределить метод – Destro

+0

Фактически он перегружен в Activity. –

+0

http://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press проверить эту – Destro

ответ

0

Просто добавьте addToBackStack в то время как вы переход между вашими фрагментами, как показано ниже:

fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).addToBackStack("tag").commit(); 

если вы пишете addToBackStack (нуль), он будет обрабатывать его сам по себе, но если вы даете тег, вы должны обрабатывайте его вручную.

+0

решить, убрав эти строки Фрагмент currentFragment = this.getSupportFragmentManager(). FindFragmentById (R.id.frame_container); если (null! = ТекущийFragment) { if (текущийFragment.equals (фрагмент)) { возвращение; } else { getSupportFragmentManager(). BeginTransaction(). Remove (currentFragment) .commit(); } } –

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