如何从活动返回到先前的viewpager片段?

时间:2020-07-23 18:23:34

标签: android android-fragments android-activity android-viewpager

我知道有与我要问的问题类似的问题,但没有一个能够解决我遇到的问题。

我有一个底部导航视图,其中有五个使用viewpager的片段,其中一个片段打开了一个活动。

问题

当我从片段中打开活动时,它可以正常工作,但问题是当我按回去时,它又回到了打开活动的同一片段中。

解决方案

我想在回退活动时将其移至上一个片段,而不是调用活动的片段。

例如:如果用户在HomeFragment上,并且单击打开活动的片段(NewsFragment),然后用户按回他们,则应返回HomeFragment,而不是NewsFragment。

到目前为止我尝试过的事情:

BottomnNvigationView的MainActivity及其后退按键

 private BottomNavigationView.OnNavigationItemSelectedListener navListener =
        new BottomNavigationView.OnNavigationItemSelectedListener() {

            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

                switch (menuItem.getItemId()) {
                    case R.id.nav_library:
                        viewPager.setCurrentItem(0);
                        temp = temp.replace("-0", "") + "-0";
                        break;
                    case R.id.nav_technology:
                        viewPager.setCurrentItem(1);
                        temp = temp.replace("-1", "") + "-1";
                        break;
                    case R.id.nav_home:
                        viewPager.setCurrentItem(2);
                        temp = temp.replace("-2", "") + "-2";
                        break;
                    case R.id.nav_science:
                        viewPager.setCurrentItem(3);
                        temp = temp.replace("-3", "") + "-3";
                        break;
                    case R.id.nav_news:
                        viewPager.setCurrentItem(4);
                        temp = temp.replace("-4", "") + "-4";
                        Intent intent = new Intent(MainActivity.this,BrowserActivity.class);
                        startActivity(intent);
                        return true;
                }
                return true;
            }
        };
@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    }
    else {
        String[] words = temp.split("-");
        if(words.length<=2)
            if (viewPager.getCurrentItem() != 2) {
                temp = "";
                viewPager.setCurrentItem(2);
            }else
                finish();
        else {
            temp = temp.replace("-" + words[words.length - 1], "");
            int pos = viewPager.getCurrentItem();
            if (viewPager.getCurrentItem() == pos)
                pos = 2;
            else
                pos = 1;
            viewPager.setCurrentItem(Integer.parseInt(words[words.length - pos]));
        }
    }


}

从片段上调用的活动(BrowersActivity)背面按

  @Override
public void onBackPressed() {

    if (viewPager.getCurrentItem() != 0) {
        viewPager.setCurrentItem(viewPager.getCurrentItem() - 1,false);
    }else{
        finish();
    }

}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

最快的解决方案是在开始第二个活动之后完成第一个活动,这样:

               case R.id.nav_news:
                    viewPager.setCurrentItem(4);
                    temp = temp.replace("-4", "") + "-4";
                    Intent intent = new Intent(MainActivity.this,BrowserActivity.class);
                    startActivity(intent);
                    finish()
                    return true;

在onBackPressed的第二个活动中,重新启动第一个活动

    @Override
    public void onBackPressed() {
    super.onBackPressed()
    startActivity(new Intent(this, FirstActivity.class))
}