Android:在片段之间跳转的正确方法

这是一个devise问题,而不是技术问题。

一般情况下 :我想要一个片段中的UI事件进行整个活动的变化。

具体案例 :我有两个片段,在同一活动中托pipe。 当用户点击其中一个片段的button时,我希望它被另一个replace。

但是,我不想要我的碎片触及我的行为。 我可能想稍后改变行为(也许,在一个更大的屏幕上,显示这两个片段,而不是replace第一个),我不希望我的片段代码具有该逻辑。

我所做的是在我的片段中实现一个Listener类,它将事件报告给Activity 。 这样,如果我想要使用另一个具有不同显示行为的Activity类,则只需更改侦听器并保持Fragment代码不变。

这是一个好方法吗? 有没有一个标准的良好做法,或更好的devise模式?

使用监听器是Fragment与您的活动之间沟通的推荐方式。

有关信息,请参阅此Android文档部分 。 长话短说,他们只是通过Activity类实现一个监听器接口,并将getActivity()结果转换为一个监听器的片段。

从我个人的经验来看,这非常方便,因为您可以:

  1. 轻松切换基础活动(例如,您在包装器活动中托pipe整个片段以便在3.0版本之前兼容,并将此片段与其他11+版本一起托pipe)
  2. 轻松控制包装活动是否支持callback。 只是检查它是否实现了监听器,如果没有,执行你的应用程序特定的操作。

你对使用Listener是正确的。 这是我在工作中还必须处理的一个项目。 处理这个问题的最好办法就是让碎片本身独立。 任何希望与Fragment进行交互的人都应该使用其公共API和/或为特定事件设置监听器。 如果您熟悉Design Patterns ,那么这就是Observer模式 。 事件可以是一般的或特定的,也可以包含数据或不包含数据。

作为我的项目的例子,我有两个片段。 一个ListFragment和一个显示所选ListItem的InfoFragment。 ListFragment已经有一个Listener接口供我的Activity挂钩,但是InfoFragment并没有包含你的基本片段。 我向InfoFragment添加了一个Listener接口,当Fragment想要closures的时候会收到通知。 对于片段,这可以通过按下button或发生特定的操作,但就我的活动而言,当触发事件时,会closures片段视图。

不要害怕为碎片使用大量的监听器,而且还要通过使用数据参数的特定操作对它们进行分组,以使它们个性化。 希望这可以帮助!

技术答案为:

我有两个片段,主持在同一个活动。 当用户点击其中一个片段的button时,我希望它被另一个replace。

  FragmentTransaction ft = this.getFragmentManager().beginTransaction(); Fragment mFragment = Fragment.instantiate(this.Activity(), Fragment2.class.getName()); ft.replace(android.R.id.content, mFragment); ft.commit(); 
 public class Example_3_Mainfile extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.example_3_mainfile); Fragment fr ;//make class that extend to thefragment fr = new Act_2_1(); FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fragment_place, fr); //id get of fragment tag from xml file there decelar fragmentTransaction.commit(); } }