57

タブレットと携帯電話の両方をサポートするようにAndroidモバイルアプリを変更しています。このために、アクティビティクラスをフラグメントに変更しています。私のアクティビティクラスには、次のように作成されたアプリケーションクラスのインスタンスがあります。

appCtx = (UnityMobileApp) getApplication();

UnityMobileApp私のアプリケーションクラスはどこにありますか。

次に、フラグメントクラスに同じインスタンスを作成します。皆さん、私がこれを解決するのを手伝ってくれませんか?

4

6 に答える 6

138

appCtx = (UnityMobileApp) getActivity().getApplication();フラグメントで使用します。

于 2012-07-20T19:57:16.687 に答える
4

メソッド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が尋ねたDzianisYafimaの回答に基づいています。したがって、クレジットはスタックオーバーフローでDzianisYafimaOgnyanに送られます。

于 2018-04-27T11:57:44.120 に答える
1

フラグメントからアプリケーションコンテキストを使用しようとしているgetApplication()ため、フラグメントクラスのメソッドではないため、使用できません
。したがって、最初にgetActivity()、フラグメントが現在関連付けられているフラグメントアクティビティを返すを使用する必要があります。

コードにまとめると、

this.getApplication()あなたの代わりに使用する必要がありますgetActivity.getApplication()

AndroidのドキュメントgetActivity()から詳細を知る

于 2017-11-30T08:11:38.533 に答える
1

または、Kotlinを使用します

fun bar() {
   (activity?.application as UnityMobileApp).let {
      it.drink()
   } ?: run {
      Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
   }
}
于 2019-05-21T23:41:23.123 に答える
1

新しい方法:

Application application = requireActivity().getApplication();
于 2021-02-10T08:33:16.827 に答える
1

誰かがKotlinバージョンを探している場合。これは私のために働きます:

(activity?.application as YourApplicationClass)
于 2021-11-04T12:18:36.767 に答える