0

私のアプリは Android 2.2 までのバージョンの Android をサポートしているため、一般的にサポートFragments(つまりSherlockFragments) を使用しています。

私の設定は、API > 11 の場合はヘッダーを使用するように構築されており、それより低い場合は従来の設定が使用されます。Fragmentこれで、プリファレンスのみでは複製できないロジックを使用して(サポート) を実装しました。古いバージョンの Android ではシンプルに起動されますSherlockFragmentActivityが、新しいバージョンではヘッダーから起動されることになっています。

これが問題です。ヘッダーはネイティブ フラグメントを想定しています。そのため、新しいバージョンでは設定がクラッシュします。この制限を回避する可能性はありますか?

以下の可能性を考えています。

  • サポート Fragment をネイティブ Fragment 内にラップします。それをしてもいいですか?はいの場合、どのように?
  • ヘッダーからクリック イベントをキャプチャし、新しいバージョンで自分でフラグメントを起動します。ヘッダー以外に簡単な設定を追加できますか?
4

1 に答える 1

1

これが私の解決策です:

FragmentSherlockFragment をラップするネイティブを作成しました。

public class HelperFragment extends ListFragment {
    MyFragment cp;

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

のような上書きされた通話はonCreateView()転送する必要がありますが、特別な処理が必要なものもあります。getActivity()inの代わりに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、アタッチされたときとデタッチされたときにセッターを呼び出し、MyFragment通常の方法でアタッチされた場合は通常どおりに動作します。

私の場合、これHelperFragmentもリダイレクトする必要があるということです。に上書きして解決しました:ListFragmentgetListView()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()れます。使用法によっては、特別な処理が必要な他の方法がありますが、概念は明確にする必要があります。HelperFragmentonActivityCreated()

于 2013-04-27T11:47:15.960 に答える