Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 后退按钮不可用';不要回到上一个片段_Android_Android Fragments - Fatal编程技术网

Android 后退按钮不可用';不要回到上一个片段

Android 后退按钮不可用';不要回到上一个片段,android,android-fragments,Android,Android Fragments,我有一个简单的android应用程序,其中launcher活动是一个导航抽屉活动。我有几个片段,当用户单击任何侧边栏按钮时都会显示出来。该活动首先显示“fragment1” @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu);

我有一个简单的android应用程序,其中launcher活动是一个导航抽屉活动。我有几个片段,当用户单击任何侧边栏按钮时都会显示出来。该活动首先显示“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函数中尝试了一些方法,如“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()。