2017-10-29 71 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();