简体   繁体   English

使用向上按钮导航回相应的片段

[英]Navigate back to the respective Fragment using up button

I have implemented Bottom Navigation with three top level destinations (one fragment for each destination): Home , Search and Settings respectively. 我已经实现了底层导航,其中包含三个顶级目标(每个目标一个片段): HomeSearchSettings In Search fragment I had search button, which up on click, takes to another activity say ActivityX. 在搜索片段中,我有一个搜索按钮,在点击后,转到另一个活动说ActivityX。 When navigated back from ActivityX using up button, it navigates to Home instead of Search. 使用向上按钮从ActivityX导航回来时,它会导航到Home而不是Search。 I want the up button navigate to Search. 我希望向上按钮导航到搜索。 How to achieve it? 怎么实现呢?

My MainActivity: 我的主要活动:

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;

        }

    });

}

In ActivityX create intent and put string in it. 在ActivityX中创建intent并将字符串放入其中。 The string contains information where are you comming from, ie. 该字符串包含您来自哪里的信息,即。 Search, and then startActivity(ActivityX, MainActivity). 搜索,然后startActivity(ActivityX,MainActivity)。

Then in MainActivity override onResume method. 然后在MainActivity中覆盖onResume方法。 In this method check if intent contains specific string you put in ActivityX. 在此方法中,检查intent是否包含您放入ActivityX的特定字符串。 If it contains that string, start the SearchFragment 如果它包含该字符串,请启动SearchFragment

Here is my example: 这是我的例子:

ActivityX: ActivityX:

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

MainActivity: 主要活动:

@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();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM