web-dev-qa-db-ja.com

Androidでアクティビティを再読み込み

AndroidActivityをリ​​ロードするのは良い習慣ですか?

最善の方法は何でしょうか。アクティビティIntentを持つthis.finishそしてthis.startActivity

191
hpique

あなたは単に使うことができます

finish();
startActivity(getIntent());

それ自身の中からActivityをリ​​フレッシュするため。

454
Sush

これは設定変更から戻ってきて変更した後にアクティビティをリロードするために私がすることです。

@Override
protected void onResume() {

   super.onResume();
   this.onCreate(null);
}

これにより、アクティビティは本質的に自分自身を再描画します。

更新:これを行うより良い方法はrecreate()メソッドを呼び出すことです。これによりアクティビティが再作成されます。

38
kingargyle

それを見たくない人のためにrecreate()の後で明滅メソッドを使うだけです

 finish();
 overridePendingTransition(0, 0);
 startActivity(getIntent());
 overridePendingTransition(0, 0);
36
AMAN SINGH

アプリケーションのメッセージリストを急いで更新する必要があったので、ダイアログを閉じる前にメインのUIアクティビティを更新しただけです。これを達成するためのもっと良い方法もあると確信しています。

// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
10
ninehundredt

Androidには、アクティビティの作成と破棄を処理するプロセス管理システムが含まれているため、手動でアクティビティを再起動した場合に見られるメリットはほとんどなくなります。あなたはそれについてのより多くの情報を見ることができます アプリケーションの基礎

ただし、よい方法は、onPauseメソッドとonStopメソッドで、保持する必要のないリソースを確実に解放し、 onLowMemory を使用して削減することです。あなたの活動は最低限必要です。

9
Al Sutton

私はIntentを使ってアクティビティをリロードするために与えられた以前の答えを見ました。これらは動作しますが、Activityクラス自体に指定されているrecreate()メソッドを使用しても同じことができます。

これを書く代わりに

//ダイアログボックスを閉じたときにメインアクティビティを更新する

Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();

これはこれを書くだけでできる。

recreate();
8
Rizwan

単に使う

this.recreate();

これはアクティビティのonCreateメソッドを引き起こすでしょう

7

あなたの意図と同じactivityから始めてactivityを閉じてください。

Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
6
Elenasys

場合によってはベストプラクティスである場合もあれば、コンテキストドリブンで実行することを選択した場合には、次の方法を使用することがアクティビティから彼女の息子に渡される最善の方法ではありません。

    Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);    
    startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);

事はあなたがactivityIWishToRunから終了()するたびにあなたが生きているアクティビティに戻ることです

3
yoav.str

私は同じ問題を抱えている

import Android.support.v4.content.IntentCompat;

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

このコードは私のために働きます。 Android API 17

2

アクティビティでは、アクティビティを「再作成」するためにrecreate()を呼び出すことができます(API 11+)

1
user10180461

しばらくこれを試してみたところ、アクティビティを再起動しても予期しない結果が生じることはありませんでした。また、これは、方向が変わったときにAndroidがデフォルトで実行する動作と非常に似ていると思います。そのため、同じような状況で実行しない理由はわかりません。

1
hpique

あなたの活動全体をリロードするのは大変な作業です。更新しなければならないコードの一部を(kotlin)に入れるだけです。

override fun onResume() {
    super.onResume()
    //here...
}

Java:

@Override
public void onResume(){
    super.onResume();
    //here...

}

そして必要に応じて "onResume()"を呼び出してください。

1
sam_coder

私はそれが良い考えではないと思います...もっときれいな方法を実装するのが良いでしょう。たとえば、アクティビティがフォームを保持している場合、クリーナーメソッドはフォーム内の各ウィジェットをクリアしてすべての一時データを削除することができます。それがあなたの望むことだと思います。アクティビティを初期状態に復元します。

1
Cristian

私の活動のlaunchModesingleTopに設定し、finish()を呼び出さずに、startActivity(getIntent())を実行するだけのようなアプローチもありました。 onCreate()onNewIntentの両方の新しいデータを気にするだけです。 Sushの方法では、AMAN SINGHが言ったようにアプリケーションが点滅するかもしれません。しかし、AMAN SINGHのアプローチは、たとえ彼が「瞬き」問題を解決したとしても、どういうわけか不要な新しい活動をまだ生み出すでしょう、と私は思います。

この質問には遅すぎますが、誰かが解決策を探しているなら、ここにあります。

0
WALKER