2017-10-29 69 views
-2

我有一個簡單的android應用程序,其中啓動器活動是一個導航抽屜活動。當用戶點擊任何側邊欄按鈕時,我會看到幾個片段。該活動首先顯示「fragment1」。後退按鈕不會回到以前的片段

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_menu); 

     preferences = getSharedPreferences("Settings", 0); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     categories fragment = new categories(); 
     FragmentTransaction fragmenttransaction = getSupportFragmentManager().beginTransaction(); 
     fragmenttransaction.replace(R.id.frame,fragment,"fragment1"); 
     fragmenttransaction.commit(); 

    } 

問題是,當我移動到其他片段此活動中,並點擊後退按鈕我的設備上,而不是回到以前的片段,應用程序立即關閉。

我試圖像在活動中onBackPressed功能「popbackstack」的一些方法,但不起作用以及

@Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 

     } 

     if(getFragmentManager().getBackStackEntryCount() > 0){ 
      getFragmentManager().popBackStackImmediate(); 
     } 

     else{ 
      super.onBackPressed(); 
     } 

    } 

片段類

public class settings extends Fragment { 

    SharedPreferences preferences; 
    private EditText rangevalue; 
    private Button savebtn; 

    private int range = 0; 
public settings() { 

    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v = inflater.inflate(R.layout.fragment_settings, container, false); 

     preferences = getActivity().getSharedPreferences("Settings",0); 
     rangevalue = (EditText)v.findViewById(R.id.rangeedittext); 
     savebtn = (Button)v.findViewById(R.id.savebutton); 

     rangevalue.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       range = Integer.parseInt(rangevalue.getText().toString()); 
      } 
     }); 


     savebtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if (range == 0) 
       { 
        SharedPreferences.Editor editor = preferences.edit(); 
        editor.putInt("Range",2000); 
        editor.apply(); 
       } 
       else 
       { 
        SharedPreferences.Editor editor = preferences.edit(); 
        editor.putInt("Range",range); 
        editor.apply(); 
       } 
       Toast.makeText(getContext(), "Settings Saved", Toast.LENGTH_SHORT).show(); 
      } 

     }); 

     return v; 

    } 
+0

https://stackoverflow.com/a/17629477/5727285嘗試.addToBackStack()。 – Hamza

回答

0

它,因爲你不增加你片段backStack,使用這個方法.addToBackStack()在backStack中保存你的片段,如果你想檢索後者

categories fragment = new categories(); 
     FragmentTransaction fragmenttransaction = getSupportFragmentManager().beginTransaction(); 
     fragmenttransaction.replace(R.id.frame,fragment,"fragment1"); 
     fragmenttransaction.addToBackStack().commit();