Android 如何实现从导航抽屉中的片段到MainActivity的onBackPress

Android 如何实现从导航抽屉中的片段到MainActivity的onBackPress,android,Android,我想对我的片段实现onBackPress,但我不知道如何实现。当我转到另一个片段时(在本例中,我的片段是来自ActivityHome的片段,我使用的是来自android Studio的标准NavigationDrawer) 这是我的活动主页代码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layou

我想对我的片段实现onBackPress,但我不知道如何实现。当我转到另一个片段时(在本例中,我的片段是来自ActivityHome的片段,我使用的是来自android Studio的标准NavigationDrawer)

这是我的活动主页代码

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

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


        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);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        FragmentHome fragment = new FragmentHome();
        fragmentTransaction.add(R.id.containerID, fragment);
        fragmentTransaction.commit();

    }

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_home, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_logout) {
            Toast.makeText(getApplicationContext(),
                    "Akun anda telah dikeluarkan!", Toast.LENGTH_LONG).show();
            Intent logout = new Intent(ActivityHome.this, ActivityMain.class);
            startActivity(logout);

            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {

        int id = item.getItemId();

        if(id == R.id.nav_home){
            ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, FragmentHome.newInstance()).commit();
        }else if (id == R.id.nav_profile){
            ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, Profile.newInstance()).commit();
        }
        else if (id == R.id.nav_history){
            ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, History.newInstance()).commit();
        }
        else if (id == R.id.nav_about_us){
            ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, AboutUs.newInstance()).commit();
        }
        else if (id == R.id.nav_ganti_kata_sandi){
            ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, GantiKataSandi.newInstance()).commit();
        }
        else if (id == R.id.nav_share){
            ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, Share.newInstance()).commit();
        }
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

我希望你们能帮我解决我的问题。

我在片段中有webview,我使用此代码检测mainactivity OnbackPressed()中的backpress代码:

确保启动片段时如下所示:

getSupportFragmentManager()
                            .beginTransaction()
                            .addToBackStack(null)
                            .replace(R.id.frame_content, new BlogFragment(), "BLOG")
                            .commit();

从活动中打开片段

Fragment fragment = Fragment.newInstance();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.fragment_slide_left_enter,
        R.anim.fragment_slide_left_exit, R.anim.fragment_slide_right_enter,
        R.anim.fragment_slide_right_exit);
        addFragmentToActivity(fragmentTransaction, Fragment, R.id
        .content_frame);


public void addFragmentToActivity(@NonNull FragmentTransaction transaction,
                                         @NonNull Fragment fragment, int frameId) {
    transaction.addToBackStack(fragment.getClass().getName());
    transaction.add(frameId, fragment, fragment.getClass().getName());
    transaction.commit();
}
这就是我如何从HomeActivity中添加片段,并在HomeActivity中为backpressed中的backcalloverride方法OnBackPressed添加片段

@Override
public void onBackPressed() {

    if (getSupportFragmentManager().getBackStackEntryCount() > 1) {

            getSupportFragmentManager().popBackStackImmediate();

}

当从活动的onBackPressed()方法中的任何片段中按下后退按钮时,可以获取事件。 假设您已从HomeFragment返回,那么您可以在如下活动中返回:

@Override
public void onBackPressed() {
HomeFragment fragment = (Fragment)findFragmentById(// fragment id);
if(fragment!=null && fragment.isVisible()){
   // Here you can code for Home Fragment's onBackPress()
    }
    super.onBackPressed();
}
@Override
public void onBackPressed() {
HomeFragment fragment = (Fragment)findFragmentById(// fragment id);
if(fragment!=null && fragment.isVisible()){
   // Here you can code for Home Fragment's onBackPress()
    }
    super.onBackPressed();
}