私はAndroidタブレットと携帯電話の両方をサポートするモバイルアプリを変更しています。このために、アクティビティクラスをフラグメントに変更しています。アクティビティクラスでは、次のように作成されたアプリケーションクラスのインスタンス:
appCtx = (UnityMobileApp) getApplication();
ここで、UnityMobileApp
は私のアプリケーションクラスです。
次に、フラグメントクラスに同じインスタンスを作成します。これを解決するのを手伝ってもらえますか?
フラグメントでappCtx = (UnityMobileApp) getActivity().getApplication();
を使用します。
メソッドgetActivity()
は、nullを返す可能性があります。これによりアプリがクラッシュする可能性があります。そのため、onActivityCreated()
内でそのメソッドを使用しても安全です。例えば:
private UnityMobileApp appCtx;
.
.
...
@Override
public View onCreateView(...){
...
}
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
appCtx = ((UnityMobileApp) getActivity().getApplication());
}
...
//access the application class methods using the object appCtx....
この回答は、Ognyanがコメントで尋ねたDzianis Yafimaの回答に由来しています。したがって、クレジットはDzianis Yafima'sおよびOgnyanになります。
または、Kotlinを使用する
fun bar() {
(activity?.application as UnityMobileApp).let {
it.drink()
} ?: run {
Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
}
}
フラグメントからアプリケーションコンテキストを使用しようとしているので、getApplication()
は使用できません。これは、フラグメントクラスのメソッドではないためです。
そのため、最初にフラグメントが現在関連付けられているフラグメントアクティビティを返すgetActivity()
を使用する必要があります。
コードをまとめると、
this.getApplication()
の代わりにgetActivity.getApplication()
を使用する必要があります
Androidドキュメント からgetActivity()
の詳細を知る