![](/img/trans.png)
[英]Androidx: Using a button in one fragment to navigate to another fragment
[英]Navigate back to the respective Fragment using up button
我已經實現了底層導航,其中包含三個頂級目標(每個目標一個片段): Home , Search和Settings 。 在搜索片段中,我有一個搜索按鈕,在點擊后,轉到另一個活動說ActivityX。 使用向上按鈕從ActivityX導航回來時,它會導航到Home而不是Search。 我希望向上按鈕導航到搜索。 怎么實現呢?
我的主要活動:
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中創建intent並將字符串放入其中。 該字符串包含您來自哪里的信息,即。 搜索,然后startActivity(ActivityX,MainActivity)。
然后在MainActivity中覆蓋onResume方法。 在此方法中,檢查intent是否包含您放入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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.