我想使用一个包含多个片段并在片段之间导航的Activity.例如,在活动中,有一个列表视图,它是一个片段,当用户从列表中选择一个项目时,视图将导航到另一个片段,如何实现?
我知道开发者网站上有一个很好的tutorial,但它处理平板电脑屏幕,其中两个窗格布局,一个列表片段和一个详细片段显示在一个屏幕上.我只想在片段之间导航而不在一个屏幕中显示两个片段.
是否有教程可以教我如何做到这一点?
解决方法
简而言之,您的问题的答案是通知您的主机活动,然后让您的主机活动使用FragmentManager替换您当前的片段容器.
其中一种方法是在第一个片段中创建一个接口,让你的主机活动注册/监听(实现)到这个接口,然后让你的FragmentManager用侦听器回调中的第二个片段替换容器内容.
我不确定教程,但这是我的片段:
第一片段
public class First extends Fragment{ private static onMySignalListener listener; //call this function from whatever you like i.e button onClickListener public void switchWindow() { if(listener != null){ listener.onMySignal(); } } public interface onMySignalListener { //customize this to your liking //plain without argument void onMySignal(); //with argument void onMySignalWithNum(int mNum); } public static void setOnMySignalListener(onMySignalListener listener) { First.listener = listener; }}
主机活动
public class HostActivity extends FragmentActivity implements onMySignalListener{ private final String ADD_TAG_IF_NECESSARY = "mTag"; @Override public void onCreate(Bundle ssi) { setContentLayout(R.layout.main); FirstFragment.setOnMySignalListener(this); } @Override public void onMySignal() { //if you're using compat library FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); //initialize your second fragment sfragment = SecondFragment.newInstance(null); //replace your current container being most of the time as FrameLayout transaction.replace(R.id.container,fragment,ADD_TAG_IF_NECESSARY); transaction.commit(); } @Override public void onMySignalWithNum(int mNum) { //you can do the same like the above probably with your own customization }}
这只是一个关于如何实现界面的例子,请自己整理一下.请注意,如果您有很多片段想要通知您的主机活动有关某些内容,则此方法无效.这样做会引导您实现对主机活动的各种监听.