最新のサポート ライブラリ (バージョン 23.0.0) を使用するようにアプリを更新したところ、Fragment クラスの onAttach() 関数が非推奨になっていることがわかりました。
の代わりに:
onAttach (Activity activity)
雪が降る:
onAttach (Context context)
私のアプリは非推奨になる前に渡されたアクティビティを使用しているので、考えられる解決策は次のようになります。
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = getActivity();
}
それは正しいやり方でしょうか?
アップデート:
23 未満の API でデバイスを実行すると、新しい onAttach() は呼び出されません。これが意図した動作ではないことを願います。
更新2:
SDK の最新アップデートにより問題は解決されました。
API 22 デバイスでテストしたところ、onAttach(Context) が呼び出されています。
クリックここ数週間前に公開したバグレポートと Google のスタッフからの回答を確認します。
ベストアンサー1
アクティビティはコンテキストなので、コンテキストがアクティビティであるかどうかを確認し、必要に応じてキャストするだけです。
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a;
if (context instanceof Activity){
a=(Activity) context;
}
}
更新:新しいContext
オーバーライドが呼び出されないと主張する人もいます。私はいくつかのテストを行いましたが、これが当てはまるシナリオは見つかりませんでした。ソースコードによると、これは決して当てはまらないはずです。私がテストしたすべてのケースでは、SDK23 以前とそれ以降の両方で、 と の両方のバージョンActivity
が呼び出されました。これが当てはまらないシナリオが見つかった場合は、問題を示すサンプルプロジェクトを作成し、Context
onAttach
Androidチームに報告する。
更新 2:バグがより早く修正されるため、私は Android サポート ライブラリ フラグメントのみを使用しています。オーバーライドが正しく呼び出されないという上記の問題は、フレームワーク フラグメントを使用する場合にのみ発生するようです。