web-dev-qa-db-ja.com

コンテキストへの参照のみがある場合は、現在のアクティビティを閉じます

Contextへの参照がある場合、現在のアクティビティを終了できますか?

現在のアクティビティへの参照がありません。

66
Buda Gavril

はい、キャスト付き:

((Activity) ctx).finish();
216
2red13

私はそれが古い投稿であることを知っていますが、おそらくこのように呼ぶのは良い考えかもしれません:

if(context instanceof Activity){
                ((Activity)context).finish(); }

このようにして、不要なClassCastExceptionsが発生しないようにします。

12
Alan Poggetti

私のケースでは次のように働いた、

ASyncTask onPostExcute()でアクティビティを終了する必要があります。

私のAsyncTaskクラスは、Contextのパラメーターを持つコンストラクターを持つ個別のパブリッククラスです。

((Activity)(mContext)).finish();

上記のみが私のために働いた...とにかく私は@ 2red13と@lucyの答えからこのアイデアを得た...すべてに感謝...

11

以下を使用してアクティビティを開始する場合:

startActivityForResult(i, 1);

次のように、finishActivity(1)を呼び出して、そのリクエストコードで開始されたアクティビティを終了できます。

((Activity)getContext()).finishActivity(1);

私の場合、ハンドラーpostDelayedで使用する必要があります。これを使用すると、完了しているアクティビティを確認できます。それが役に立てば幸い!

1
Casey Murray

終了するアクティビティの実行ビューにアクセスできる場合(たとえば、クリックリスナーを使用している場合)、次の操作を実行できます。

((Activity)getContext()).finish();

(ここに来てくれた2red13に感謝します)。

1
Lucy

設定アクティビティを閉じるときに同じ問題が発生しました。これが私がしたことです:

public class T2DPreferenceActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          getFragmentManager().beginTransaction().replace(Android.R.id.content,
                new T2DPreferenceFragment()).commit();
    }

    public static class T2DPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.server_screen_preference);
            Preference testServicePreference = getPreferenceScreen().findPreference("PREFERRED SERVER");
            testServicePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    T2DPreferenceActivity.closeActivity(getActivity());
                    return true; //returning true still makes the activity handle the change to preferences
                }
            });
        }

        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            ListView lv = (ListView)view.findViewById(Android.R.id.list);
            ViewGroup parent = (ViewGroup)lv.getParent();
            parent.setPadding(0, 100, 0, 0);
        }
    }

    protected static void closeActivity(Activity activity) {
        activity.finish();
    }
}
0
Droid Chris