![](/img/trans.png)
[英]Navigating through Fragments in android without adding it into backstack
[英]Adding two fragments to the backstack within host Activity
我目前有一個名為MainActivity
的Android Activity
,該Activity
通過以下代碼托管2個Fragments
(片段A和片段B)。 我正在使用TabLayout
在MainActivity
Fragment
A和Fragment
B之間來回導航。 每個Fragment
除了onItemClick
方法外還包括一個listView
。 在Fragment
A和Fragment
B中單擊listView
的項目后,用戶將被帶到一個新的Activity
(分別為活動1和活動2。我需要覆蓋Activity
2中的后退button
,以便將我帶回到Fragment
B在MainActivity
,我很難理解在哪里以及如何將Fragment
A和Fragment
B都添加到backstack
,因此讓我在Activity_1和Activity_2中單擊“后退” button
可以將我帶回到從中導航的Fragment
。以及如何在MainActivity
實現片段A和片段B的backstack
代碼。
MainActivity.java
public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext()));
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
}
private class CustomAdapter extends FragmentStatePagerAdapter{
private String fragments [] = {"Fragments 1", "Fragments 2"};
public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext){
super(supportFragmentManager);
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
default:
return null;
}
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public CharSequence getPageTitle(int position) {
return fragments[position];
}
}
}
FragmentA.java
public class FragmentA extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragA, container, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
. . .
}
}
FragmentB.java
FragmentA.java
public class FragmentB extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragB, container, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
. . .
}
}
您可以使用startActivityForResult()啟動新活動,並根據正在進行的活動返回一個常量,並在MainActivity中處理響應並顯示所需的片段。
只要您的MainActivity知道(或可以知道)哪個片段(A或B)處理過,請單擊:
如果您使用FragmentStatePagerAdapter(或類似的產品)來服務您的標簽,則更加簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.