2016-08-04 21 views
0

私は、環境設定の変更を待ち受け、アプリケーションをリロードするアクティビティを持っています。私はそれを行うためにrecreate()を使用しています。しかし、私はそれを介して議論をどのように渡すかわからないので、私はマニュアルのアクティビティリロードに頼っています。アクティビティを再作成して引数を渡す

Intent intent = getIntent(); 
finish(); 
// add in the arguments as Extras to the intent 
startActivity(intent); 

これは私が望む行動を持っていますが、彼らは活動が殺されると同じ活動がリニューアル見るように活動の再作成は、ユーザーのために滑らかではありません。私は、ユーザーがその活動が再開されたことに気付かないようにしたい。だから、私の質問は、方法recreate()を使用することができ、まだ引数を渡すことができます。

+0

あなたは(再作成を使用)とsharedPreference – 7geeky

+0

で引数を保存することができるということです可能な方法は? – fuadj

答えて

2

この方法を試すことができます: 起動モードをシングルトップとして再起動し、onNewIntent(意図インテント)メソッドを処理できます。このようにして、アクティビティを再開し、インテントを送信します。このアクティビティは強制終了されません。つまり、アクティビティの作成は呼び出されません。


<activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <action android:name="relaunch.activity.ACTIVITY_SELF_START_INTENT" /> 
       <category android:name = "android.intent.category.DEFAULT"/> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
のAndroidManifest.xml

public class MainActivity extends Activity implements View.OnClickListener { 
    Button btn ; 
    String mRelaunchData ; 
    public static String TAG = "RelaunchMainActivity"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn = (Button)findViewById(R.id.button); 
     btn.setOnClickListener(this); 
     Log.e(TAG, "onCreate called"); 
    } 

    @Override 
    public void onClick(View view) { 
     Log.e(TAG, "onClick called"); 
     Intent intent = new Intent("relaunch.activity.ACTIVITY_SELF_START_INTENT").setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     intent.putExtra("RESTART_DATA", "This is relaunch of this Activity"); 
     startActivity(intent); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     Log.e(TAG, "onNewIntent called"); 
     mRelaunchData = intent.getStringExtra("RESTART_DATA"); 
     Log.e(TAG, "mRelaunchData =" + mRelaunchData); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Log.e(TAG, "onResume called"); 
     if(mRelaunchData != null){ 
      Toast.makeText(MainActivity.this, mRelaunchData, Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     Log.e(TAG, "onPause called"); 

    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     Log.e(TAG, "onStart called"); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     Log.e(TAG, "onStop called"); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     Log.e(TAG, "onDestroy called"); 
    } 
} 

onClickのアクティビティを再起動します。

ライフサイクルは

-onclick

-onPause

なります-onNewIntent

-onResume

+0

しかし、私はoncreateを呼びたいと思っています。問題の要点は、(UI全体をかなり変更する)設定変更を処理することでした。私はUI作成を行うので、呼び出す必要があります。 – fuadj

+0

onCreateとsetvisibilityのビューは、再起動後に必要なUIのセットに対してfalseになり、onNewIntentを取得したら、そのインテントを使用して、これらのビューの可視性をtrueに設定し、もう一方をfalseに設定します。このようにして、ユーザーはアクティビティが再開されたことに気付かないでしょう。 – Raman

関連する問題