Android 后退按钮不可用';不要回到上一个片段
我有一个简单的android应用程序,其中launcher活动是一个导航抽屉活动。我有几个片段,当用户单击任何侧边栏按钮时都会显示出来。该活动首先显示“fragment1”Android 后退按钮不可用';不要回到上一个片段,android,android-fragments,Android,Android Fragments,我有一个简单的android应用程序,其中launcher活动是一个导航抽屉活动。我有几个片段,当用户单击任何侧边栏按钮时都会显示出来。该活动首先显示“fragment1” @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu);
@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函数中尝试了一些方法,如“popbackbackback”,但效果并不理想
@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;
}
这是因为您没有将片段添加到backStack,如果您想检索backStack,请使用此方法
.addToBackStack()
将片段保存到backStack中
categories fragment = new categories();
FragmentTransaction fragmenttransaction = getSupportFragmentManager().beginTransaction();
fragmenttransaction.replace(R.id.frame,fragment,"fragment1");
fragmenttransaction.addToBackStack().commit();
我是这样工作的:
ProfileFragment profile_fragment = new ProfileFragment();
if(getFragmentManager() != null) {
getFragmentManager()
.beginTransaction()
.add(R.id.frame_content, profile_fragment)
.addToBackStack("back_profile_fragment")
.commit();
让我们来回顾一下这样的方法:
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
尝试使用.addToBackStack()。