我的应用支持Android版本高达Android 2.2,这就是为什么我一般使用支持Fragments
(即SherlockFragments
)。
我的偏好设置是在API>时使用标头。 11和较低的传统喜好。现在我已经实现了一个(支持)Fragment
,其逻辑只能用首选项复制。在较旧的Android版本上,它将在简单的SherlockFragmentActivity
内启动,但在较新的版本上,它应该从标题中启动。
这是问题:标头期望本机片段。这就是为什么在新版本的首选项崩溃。是否有可能绕过这种限制?
我正在考虑以下可能性:
答案 0 :(得分:1)
这是我的解决方案:
我创建了一个包裹我的SherlockFragment的本地Fragment
。
public class HelperFragment extends ListFragment {
MyFragment cp;
public HelperFragment() {
cp = new MyFragment();
}
}
需要转发onCreateView()
等被覆盖的来电,但有些需要特殊处理。而不是getActivity()
中的MyFragment
我使用了以下构造:
private Activity activity;
@Override
public void onAttach(final Activity activity) {
this.activity = activity;
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
activity = null;
}
public void setActivity(final Activity activity) {
this.activity = activity;
}
HelperFragment
在附加和分离时调用setter,如果MyFragment
以常规方式附加,则它会照常工作。
在我的情况下,HelperFragment
也是ListFragment
,因此需要重定向对getListView()
的调用。我通过覆盖getListView()
中的MyFragment
来解决这个问题:
private ListView listView;
@Override
public ListView getListView() {
if (listView != null) {
return listView;
} else {
return super.getListView();
}
}
public void setListView(final ListView listView) {
this.listView = listView;
}
并在setListView()
的{{1}}方法中调用HelperFragment
。根据使用情况,还有其他方法需要特殊处理,但概念应该清楚。