2016-08-04 14 views
0

Ich habe eine Aktivität, die Präferenzänderungen abhört und die App neu lädt. Ich verwende recreate(), um das zu tun. Aber ich weiß nicht, wie ich Argumente durchreichen soll, also habe ich auf das manuelle Nachladen von Aktivitäten zurückgegriffen.Erstellen Sie eine Aktivität neu und übergeben Sie auch Argumente

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

Dies hat das Verhalten ich will, aber die Erschaffungs der Aktivität ist für den Benutzer nicht glatt, da sie die Aktivität getötet werden sehen und die gleiche Aktivität der Neubelebung. Ich möchte, dass der Benutzer nicht weiß, dass die Aktivität neu gestartet wurde. Also, meine Frage ist, kann ich die Methode recreate() verwenden und noch Argumente übergeben.

+0

Sie neu verwenden können() und die Argumente in sharedPreference speichern – 7geeky

+0

Ist das der nur möglich? – fuadj

Antwort

2

Sie können diesen Weg versuchen: Sie können Ihre Aktivität mit Start Mode als SingleTop neu starten und die OnNewIntent (Intent Intent) -Methode behandeln. Auf diese Weise starten Sie die Aktivität neu und senden die Absicht, zusammen mit dieser Aktivität wird nicht getötet, d. H. Die Erstellung Ihrer Aktivität wird nicht aufgerufen.

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"); 
    } 
} 

in AndroidManifest.xml

<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> 

onClick wird die Aktivität wiederzubeleben.

LifeCycle wird

-onclick

-onPause

-onNewIntent

-onResume

+0

Aber ich möchte oncreate aufgerufen werden, der ganze Punkt der Frage war, Präferenzänderungen (die die gesamte UI erheblich ändern) zu behandeln, ich mache UI Sachen in oncreate, so dass ich es – fuadj

+0

eine Möglichkeit nennen muss, um alle zu erstellen Die Views in onCreate und setvisibility werden nach dem Neustart auf falsch gesetzt, und sobald Sie onNewIntent aufgerufen haben, verwenden Sie die Absicht und setzen Sie die Sichtbarkeit dieser Sicht auf true und die andere auf false. Auf diese Weise wird dem Benutzer nicht bewusst, dass die Aktivität erneut gestartet wurde. – Raman