1. ホーム
  2. android

[解決済み] Android Fragment onAttach() 非推奨

2022-01-28 08:49:46

質問

最新のサポートライブラリ(バージョン23.0.0)を使用するようにアプリをアップデートしたところ、FragmentクラスのonAttach()関数が非推奨になったことがわかりました。

の代わりに

onAttach (Activity activity)

今なんです。

onAttach (Context context)

私のアプリは非推奨の前に渡されたアクティビティを使用しているので、私が考える可能な解決策は、次のとおりです。

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    activity = getActivity();
}

そのやり方は正しいでしょうか?

UPDATEしてください。

APIが23より低いデバイスを実行すると、新しいonAttach()が呼び出されない。これが意図したものでないことを祈ります!

UPDATE 2:

この問題は、SDKの最新のアップデートにより解決されました。

API 22のデバイスでテストしたところ、onAttach(Context)が呼び出されています。

クリック ここで 数週間前に出したバグレポートとGoogleの回答はこちらです。

解決方法は?

Activityはコンテキストなので、単純にコンテキストがActivityであることを確認し、必要に応じてキャストすればよい。

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    Activity a;

    if (context instanceof Activity){
        a=(Activity) context;
    }

}

更新しました。 という主張もあるようですが、新しい Context のオーバーライドが呼び出されることはありません。いくつかのテストを行いましたが、これが当てはまるシナリオは見つかりませんでしたし、ソースコードによれば、決してそうであってはなりません。SDK23以前も以後も、私がテストしたすべてのケースで ActivityContext のバージョンです。 onAttach が呼び出されました。 もし、そうでないシナリオがあれば、その問題を説明するサンプルプロジェクトを作成し Android チームに報告する .

アップデート2: 私はAndroid Support Libraryのフラグメントのみを使用しています。オーバーライドが正しく呼び出されないという上記の問題は、フレームワークのフラグメントを使用した場合のみ明らかになるようです。