我用三个顶级目的地(每个目的地一个片段)实现了“底部导航”:分别是“主页”,“搜索”和“设置”。在搜索片段中,我有搜索按钮,单击该按钮会转到另一个活动,即ActivityX。使用向上按钮从ActivityX导航回时,它将导航到“主页”而不是“搜索”。我希望向上按钮导航到“搜索”。如何实现呢?

我的主要活动:

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

    sp=getSharedPreferences("login_details",MODE_PRIVATE);
    if(!sp.getBoolean("login_status", false)){
        isLoggedIn=false;
    }
    else
        isLoggedIn=true;

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

    BottomNavigationView bottomNav = (BottomNavigationView) findViewById(R.id.navigation);
    fragmentManager=getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction ft1=fragmentManager.beginTransaction();
    ft1.add(R.id.container,new HomeFragment());
    ft1.commit();
    updateToolbarText("Home");
    bottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            if(item.getItemId()==R.id.action_home){
                fragmentManager=getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction ft1=fragmentManager.beginTransaction();
                ft1.replace(R.id.container,new HomeFragment());
                ft1.commit();

                updateToolbarText("Home");

            }
            if(item.getItemId()==R.id.action_search){
                fragmentManager=getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction ft2=fragmentManager.beginTransaction();
                ft2.replace(R.id.container,new SearchFragment());
                ft2.commit();
                MainActivity.super.onBackPressed();
                updateToolbarText("Search");


            }
            if(item.getItemId()==R.id.action_settings){
                fragmentManager=getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction ft3=fragmentManager.beginTransaction();
                ft3.replace(R.id.container,new SettingsFragment());
                ft3.commit();
                updateToolbarText("Settings");
            }
            return true;

        }

    });

}

最佳答案

在ActivityX中创建意图,并在其中放入字符串。该字符串包含您来自何处的信息,即。搜索,然后startActivity(ActivityX,MainActivity)。

然后在MainActivity中重写onResume方法。在此方法中,检查意图是否包含您放入ActivityX中的特定字符串。如果包含该字符串,请启动SearchFragment

这是我的示例:

ActivityX:

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(FragmentTrainingDetail.this, MainActivity.class);
    intent.putExtra("TAG", "FragmentMyTraining");
    startActivity(intent);
    finish();
}


主要活动:

@Override
protected void onResume() {
    super.onResume();

    Intent intent = getIntent();

    if (intent.hasExtra("FragmentMyTraining")) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.content_frame, new FragmentMyTraining());
        fragmentTransaction.addToBackStack("my");
        fragmentTransaction.commit();
    } else if (intent.hasExtra("FragmentPopularTraining")) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.content_frame, new FragmentPopularTraining());
        fragmentTransaction.addToBackStack("pop");
        fragmentTransaction.commit();
    }
}

10-02 04:06