0

我的应用支持 Android 2.2 以上的 Android 版本,这就是为什么我通常使用支持Fragments(即SherlockFragments)。

我的偏好是在 API > 11 时使用标头,而在较低时使用传统偏好。现在我已经实现了一个(支持)Fragment,它的逻辑不能仅通过首选项来复制。在较旧的 Android 版本上,它将在一个简单的版本中启动,SherlockFragmentActivity但在较新的版本上,它应该从标头启动。

这就是问题所在:标头需要原生片段。这就是为什么在较新版本上首选项会崩溃的原因。有没有可能绕过这个限制?

我正在考虑以下几种可能性:

  • 将支持片段包装在本机片段中。我可以这样做吗?如果是,如何?
  • 从标题中捕获点击事件并在较新版本上自己启动片段。除了标题之外,我可以添加简单的首选项吗?
4

1 回答 1

1

这是我的解决方案:

我创建了一个Fragment包含我的 SherlockFragment 的原生程序。

public class HelperFragment extends ListFragment {
    MyFragment cp;

    public HelperFragment() {
        cp = new MyFragment();
    }
}

覆盖的呼叫onCreateView()需要转发,但有些需要特殊处理。而不是getActivity()inMyFragment我使用了以下构造:

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()inHelperFragmentonActivityCreated()方法。根据使用情况,会有其他需要特殊处理的方法,但概念应该清楚。

于 2013-04-27T11:47:15.960 回答