私はいつもContext
からActivity
をView
にキャストしても安全ですか?ビュー内でコンテクストをアクティビティにキャストすることは常に安全ですか
View {
Activity activity = (Activity)this.getContext();
}
これまでのところ、これまでどおりに問題なく動作します。私は疑問に思っていた、上記のコードが失敗するエッジケースはありますか?
私はいつもContext
からActivity
をView
にキャストしても安全ですか?ビュー内でコンテクストをアクティビティにキャストすることは常に安全ですか
View {
Activity activity = (Activity)this.getContext();
}
これまでのところ、これまでどおりに問題なく動作します。私は疑問に思っていた、上記のコードが失敗するエッジケースはありますか?
私は、このような場合を考えることはできませんが、私はそれは二つの理由のために、このような素晴らしいアイデアはないと思う:あなたが明示的に活動を必要としないときあなたは、それをしたいと思うのはなぜ
View
の別のコンテキストがある場合はどうなりますか?私が知っているように、コンテキストはosからService、BroadcastReceiverなどに渡すことができるため、必ずしも安全ではありません。しかし、ほとんどの場合、それは問題ではありません。このコードでご確認ください
if(context instanceof Activity)
お気軽にご利用ください。
技術的には、ビューはあなたのビューのみの活動によってインスタンス化されていることをスーパー確実でない限り、私はこのことを示唆していますので(LayoutInflater
経由)任意のコンテキスト
で作成することができます。これを行うことはクリーンな考えではありません。
私はあなたがスニペット以下を使用することができると思う:。
/**
* Get activity instance from desired context.
*/
public static Activity getActivity(Context context) {
if (context == null) return null;
if (context instanceof Activity) return (Activity) context;
if (context instanceof ContextWrapper) return getActivity(((ContextWrapper)context).getBaseContext());
return null;
}
** 1 **呼び出し側ができないで、[状況](http://stackoverflow.com/a/5376772)があります。パラメータとしてのアクティビティ** 2。** Androidは後方互換性を維持するのにはかなり良いです(私はその開発ツールについては言えません)。 IMHO @ lulumeyaの答えは正しい答えです。 – ateiob
'ContextThemeWrapper'は確かに全く新しいレベルのナンセンスを追加します。私は 'getBaseContext()'を使ってアクティビティにアクセスできると聞いています。 – EpicPandaForce