2016-08-16 63 views
1

如何使onBackPressed()從每個片段繼續到HomeFragment或轉到之前的片段。以編程方式返回到上一個片段

以下是默認設置片段的代碼主頁片段在應用程序啓動時打開,但在後面的應用程序關閉時打開。 需要幫助解決它感謝 這是我MainActivityDrawer類

private Toolbar mToolbar; 
private FragmentDrawer drawerFragment; 
GpsTrackerAlarmReceiver alarm = new GpsTrackerAlarmReceiver(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_drawer); 

    mToolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    drawerFragment = (FragmentDrawer) 
    getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
    drawerFragment.setDrawerListener(this); 
    alarm.setAlarm(this); 

    // display the first navigation drawer view on app launch 
    displayView(0); 
} 
     @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_help) { 
     return true; 
    } 
    if(id == R.id.action_search){ 
     Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
@Override 
public void onDrawerItemSelected(View view, int position) { 
    displayView(position); 
} 
private void displayView(int position) { 
    Fragment fragment = null; 
    String title = getString(R.string.app_name); 
    switch (position) { 

     case 0: 
      fragment = new HomeFragment(); 
      title = getString(R.string.title_home); 
      break; 
     case 1: 
      fragment = new ProfileFragment(); 
      title = getString(R.string.title_profile); 
      break; 
     case 2: 

      fragment = new ContactsFragment(); 
      title = getString(R.string.title_contacts); 
      break; 
     case 3: 
      fragment = new GeoFencFragment(); 
      title = getString(R.string.title_geofence); 
      break; 
     case 4: 
      fragment = new HistoryFragment(); 
      title = getString(R.string.title_history); 
      break; 
     case 5: 
      fragment = new SettingFragment(); 
      title = getString(R.string.title_settimg); 
      break; 
     default: 
      break; 
    } 
    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.container_body, fragment); 
     fragmentTransaction.commit(); 
     // set the toolbar title 
     getSupportActionBar().setTitle(title); 
    } 
} 
@Override 
public void onResume() { 
    Log.d(TAG, "onResume"); 
    super.onResume(); 
} 
@Override 
protected void onStop() { 
    super.onStop(); 
}} 
+0

你錯過了行片斷交易加入到堆棧中 – Ramit

+0

感謝你能否解釋一些有關片段交易的更多信息。 –

+0

我認爲你有行fragmentTransaction.addToBackStack(null);在您的原始代碼中。請解釋你的問題,你想達到什麼目的。如果你有一個家庭片段,你可以從這裏和背部片段5片段按你想回家,然後再按回你將退出。爲此,您不需要重寫onBackPress。如果您要在堆棧中添加交易,系統會自動處理。如果我錯了,請糾正我。 – Ramit

回答

0

我做下實現它會自動進入到以前的片段。 2.在後面按檢查當前顯示的片段是不是家片段,然後顯示其他明智的super.onBackPressd()關閉活動。

if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) 
     { 
      mDrawerLayout.closeDrawer(GravityCompat.START); 
     } 
    else if (fragmentManager.findFragmentById(R.id.content_frame_drawer_layout) != homeFragment) 
       { 
        fragmentManager.beginTransaction().replace(R.id.content_frame_drawer_layout, homeFragment).commit(); 

       } 
       else 
       { 
        super.onBackPressed(); 
       } 
+0

感謝兄弟我明白了,你能解釋一些更多的地方,我在我的項目中添加此代碼。我是新的所以geting錯誤 –

+0

請將此添加到onBackPressed()(刪除您當前的代碼)。請測試並讓我知道這個你想實現 – Ramit

+0

homeFragment存放home的片段。這是抽屜活動中的類級變量。設置它的值,你正在創建主頁片段 – Ramit

0

試試這個

getFragmentManager().beginTransaction(). 
    remove(this).commit(); 

或使用popBackStackImmediate()

使用addToBackstack()前提交()。在您的活動

當你想刪除片段使用popBackStackImmediate()

+0

謝謝我將嘗試 –

+0

不工作兄弟 –

+0

請再次檢查編輯我的答案 – SaravInfern

0

這段代碼保存一天首先得到共享prefrences從抽屜的位置值和儲存,然後在onBackPressed感謝大家沒有得到這個現在的位置是爲幫助

public void onBackPressed() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    int fragment_num = sharedPreferences.getInt("pos", 0); 
    if(fragment_num != 0) 
    { 
     displayView(0); 
    } 
    else 
    { 
     super.onBackPressed(); 
    } 
}