Context
への参照がある場合、現在のアクティビティを終了できますか?
現在のアクティビティへの参照がありません。
はい、キャスト付き:
((Activity) ctx).finish();
私はそれが古い投稿であることを知っていますが、おそらくこのように呼ぶのは良い考えかもしれません:
if(context instanceof Activity){
((Activity)context).finish(); }
このようにして、不要なClassCastExceptionsが発生しないようにします。
私のケースでは次のように働いた、
ASyncTask onPostExcute()でアクティビティを終了する必要があります。
私のAsyncTaskクラスは、Contextのパラメーターを持つコンストラクターを持つ個別のパブリッククラスです。
((Activity)(mContext)).finish();
上記のみが私のために働いた...とにかく私は@ 2red13と@lucyの答えからこのアイデアを得た...すべてに感謝...
以下を使用してアクティビティを開始する場合:
startActivityForResult(i, 1);
次のように、finishActivity(1)を呼び出して、そのリクエストコードで開始されたアクティビティを終了できます。
((Activity)getContext()).finishActivity(1);
私の場合、ハンドラーpostDelayedで使用する必要があります。これを使用すると、完了しているアクティビティを確認できます。それが役に立てば幸い!
終了するアクティビティの実行ビューにアクセスできる場合(たとえば、クリックリスナーを使用している場合)、次の操作を実行できます。
((Activity)getContext()).finish();
(ここに来てくれた2red13に感謝します)。
設定アクティビティを閉じるときに同じ問題が発生しました。これが私がしたことです:
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();
}
}