【发布时间】:2016-06-21 13:15:15
【问题描述】:
我对 Androind 很陌生,试图弄清楚片段和活动应该如何协同工作。我有一个非常丑陋的布局。 1 个活动和 1 个“根”片段。当用户单击左侧菜单片段时,片段管理器将替换它。
expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
LeftMenuItem group = groups.get(i);
String fragmentTag = group.getFragmentTag();
if (fragmentTag.equals(Fragment1.TAG)) {
Fragment1 fragment = (Fragment1) currentFragmentManager.findFragmentByTag(Fragment1.TAG);
if (fragment == null) {
fragment = new Fragment1();
}
FragmentTransaction ft = currentFragmentManager.beginTransaction();
ft.replace(R.id.root_frame, fragment, Fragment1.TAG);
ft.commitAllowingStateLoss();
} else if (fragmentTag.equals(Fragment2.TAG)) {
我假设上面的代码应该用新的片段替换当前片段。片段实际上总是空的。我不知道为什么。
在RootFragment的onCreateView中默认创建Fragment1。
if (savedInstanceState == null) {
Log.d(TAG, "savedInstanceState is null, creating Framgent1");
Fragment1 fragment = new Fragment1();
FragmentTransaction ft = currentFragmentManager.beginTransaction();
ft.replace(R.id.root_frame, fragment, Fragment1.TAG);
ft.commitAllowingStateLoss();
}
在rootFragment的onCreateView中,rootFragment用另一个Fragment1替换了自己,这对我来说看起来很丑。它是众所周知的 Android 模式还是只是糟糕的设计?
假设使用 Volley 从 MyActivity 的 onCreateView 发送 httpRequest。收到响应后,我需要从回调中更新 Fragment1 UI。我该怎么做?
我应该尝试在我的活动中使用 findFragmentByTag 查找片段并直接更新 UI 吗? http volley 响应是否在同一个线程中?如果不是,可以从不同线程更新 UI 吗?
我应该使用 Handler 类将消息从 Activity 发送到 Fragment 吗?
【问题讨论】: