[英]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.