Android:在片段之间跳跃的正确方式
这是一个设计问题,而不是技术问题 一般情况:我希望片段中的UI事件能够在整个活动范围内进行更改 特定案例:我有两个片段,托管在同一活动中。当用户单击其中一个片段中的按钮时,我希望它被另一个片段替换 我不想,但是,我的片段会触动我的活动。我可能希望稍后更改行为(可能在更大的屏幕中,显示两个片段,而不是替换第一个片段),我不希望我的片段代码具有这种逻辑 我所做的是在片段中实现一个Android:在片段之间跳跃的正确方式,android,design-patterns,android-fragments,Android,Design Patterns,Android Fragments,这是一个设计问题,而不是技术问题 一般情况:我希望片段中的UI事件能够在整个活动范围内进行更改 特定案例:我有两个片段,托管在同一活动中。当用户单击其中一个片段中的按钮时,我希望它被另一个片段替换 我不想,但是,我的片段会触动我的活动。我可能希望稍后更改行为(可能在更大的屏幕中,显示两个片段,而不是替换第一个片段),我不希望我的片段代码具有这种逻辑 我所做的是在片段中实现一个侦听器类,它将事件报告回活动。这样,如果我想使用另一个具有不同显示行为的活动类,我只需更改侦听器并保持片段代码不变 这是个
侦听器
类,它将事件报告回活动
。这样,如果我想使用另一个具有不同显示行为的活动
类,我只需更改侦听器并保持片段
代码不变
这是个好办法吗?是否有标准的良好实践或更好的设计模式?关于使用侦听器,您说得对。这也是我在工作项目中必须处理的事情。处理它的最好方法是使碎片在自然界中独立。任何希望与片段交互的东西都应该使用其公共API和/或为特定事件设置侦听器。如果您熟悉,这是最新的。事件可以是一般的或特定的,也可以包含数据或不包含数据 作为我项目的一个例子,我有两个片段。显示所选ListItem的ListFragment和InfoFragment。ListFragment已经为我的活动提供了一个监听器接口,但是InfoFragment没有,因为它是您的基本片段。我在InfoFragment中添加了一个监听器接口,当片段想要关闭时会收到通知。对于片段,这可以通过按下按钮或执行特定操作来实现,但就我的活动而言,当事件被触发时,它将关闭片段视图
不要害怕为片段使用大量侦听器,还要尝试使用数据参数按特定操作对其进行分组,以使其个性化。希望这有帮助 建议使用侦听器在片段和活动之间进行通信 有关信息,请参见此。长话短说,它们只是通过Activity类实现了一个监听器接口,并将getActivity()结果转换为一个片段到监听器 根据我个人的经验,这非常方便,因为您可以:
以下问题的技术答案: 我有两个片段,托管在同一个活动中。当用户单击其中一个片段中的按钮时,我希望它被另一个片段替换
我遇到了类似的问题。我有一个FragmentActivity,它通过tabhost 4 listfragments进行管理,每个listfragments都可以根据用户交互启动其他片段(所有片段共享其内容显示的相同布局)。回调模式仍然有效吗?谢谢,回调模式非常适合这种情况。让活动通过侦听所有片段来完成启动
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();
}
}