2013-03-29 16 views
13

Sto lavorando su un'app per Android. Voglio cambiare l'attività di avvio in modo dinamico. Voglio dire quando l'utente inizia l'app per la prima volta, poi l'attività inizia a cambiare e quando si avvia la seconda volta inizia il cambio di attività. Salterà prima le due attività e passerà alla terza attività. Come posso ottenerlo.Come modificare dinamicamente l'attività iniziale?

risposta

0

Utilizzare le preferenze per memorizzare i valori (Condizioni) che si desidera avere. quindi in base a tale modifica, startActivity.

1

è possibile utilizzare SharedPreference in base al proprio Requisito.

è possibile memorizzare e recuperare valori di questa Link

All'interno di ogni Oncreate() metodo della vostra attività è possibile verificare il valore SharedPreference e iniziare la vostra attività lì.

Spero che ti possa aiutare.

0

Usa sharedpreference alla prima volta che registrato o no

if (!checkNameInfo()) { 
//first time 
        FirstActivity(); 
       } else { 
//second time 
        Intent i = new Intent(first.this, second.class); 
        startActivity(i); 
        finish(); 
       } 

Controllare il valore

private final boolean checkNameInfo() { 
     boolean role = mPreferences.contains("Name"); 
     if (role) { 
      return true; 
     } 
     return false; 
    } 

IN firstActivity

SharedPreferences.Editor editor = mPreferences.edit(); 
       editor.putString("Name", edt.getText().toString()); 
editor.commit(); 
Intent i = new Intent(first.this, second.class); 
         startActivity(i); 
0

Questo è quello che faccio quando un utente ha selezionato un Ricordami nella casella di controllo nella schermata di accesso.

Per salvare valore al file SharedPreference:

Avrete bisogno di fare qualcosa di simile, una volta nel primo Activity e una volta nel secondo Activity

sharedPrefs = getApplicationContext().getSharedPreferences(PRIVATE_PREF, Context.MODE_PRIVATE); 

// EDITOR INSTANCE TO SAVE THE NAG SETTING 
editor = sharedPrefs.edit(); 

// GET THE NAG SETTING CHECKBOX 
if (chkbxNagSetting.isChecked()) { 

    editor.putBoolean(NAG_SETTING, true); 
} else { 
    editor.putBoolean(NAG_SETTING, false); 
} 

editor.commit(); 

Per recuperare il valore dal file SharedPreference :

boolean blNagSetting = sharedPrefs.getBoolean(NAG_SETTING, false); 

if (blNagSetting == true) { 
    Intent startMainPage = new Intent(SignIn.this, SplashScreen.class); 
    startMainPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(startMainPage); 
    finish(); 
} 

E queste sono le necessarie variabili globali/casi utilizzati nel Activity:

SharedPreferences sharedPrefs; 
Editor editor; 
private static final String PRIVATE_PREF = "CHANGE_TO_SOME_FILE_NAME"; 
private static final String NAG_SETTING = "nag_setting"; 

Si dovrà modificare leggermente il codice per tenere conto di saltare 2 Activities.

Fammi sapere se hai bisogno di aiuto.

0

Indipendentemente da ciò che apre la tua app in un'attività principale. Nel frattempo utilizzare SharedPreference per salvare i dati su quante volte è stata caricata l'app.

Hai intenzione di fare qualcosa, come qui sotto nella tua

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    String dataAvailable; 
    SharedPreferences prefs = getSharedPreferences("countPref", Context.MODE_PRIVATE); 
    dataAvailable = prefs.getString("dataAvailable", null); 

    //checking whether launching for the first time. 
    if(dataAvailable!=null){ 
     int appLoadedCount = prefs.getInt("appLoadedCount", -1); 
     appLoadedCount++; 
     prefs.edit().putInt("appLoadedCount", appLoadedCount).commit(); 

     // Check how many times loaded 
     if(appLoadedCount==0){ 
      Intent firstAct = new Intent(MainActivity.this, FirstActivity.class); 
      startActivity(firstAct); 
     } 
     else if(appLoadedCount==1){ 
      Intent scndAct = new Intent(MainActivity.this, ScndActivity.class); 
      startActivity(scndAct); 
     } 
     else if(appLoadedCount==2){ 
      Intent thirAct = new Intent(MainActivity.this, ThirdActivity.class); 
      startActivity(thirAct); 
     } 
     else{ 
      Intent thirAct = new Intent(MainActivity.this, ThirdActivity.class); 
      startActivity(thirAct); 
     } 

     Log.v("avilable", dataAvailable); 
     Log.v("avilable", String.valueOf(appLoadedCount)); 
    } 
    else{ 
     //loading first time 
     prefs.edit().putString("dataAvailable", "yeap").commit(); 
     //setting the count to 1 as loaded for the firs time 
     prefs.edit().putInt("appLoadedCount", 0).commit(); 
     Log.v("Not avilable", "Loaded first time"); 
    } 


} 
28

Non è possibile modificare la prima attività in modo dinamico, ma è possibile creare un'attività trasparente come questo:

<activity 
    android:name=".ActivityLauncher" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

e selezionare l'attività successiva nel metodo onCreate:

if (logged()) { 
    intent = new Intent(this,MainActivity.class); 
} else { 
    intent = new Intent(this,SignInActivity.class); 
} 
startActivity(intent); 
finish(); 
+0

Funziona bene. –

+0

ha bisogno di layout ?? –

0

non è necess È necessario che un'attività abbia un file di layout. È possibile avere una condizione per controllare l'attività di avvio e reindirizzare ad altre attività in base alla condizione. (Tuttavia, la transizione dall'attività di avvio all'attività di condizione non sarà visibile).

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
Intent intent; 
if (condition) { 
    intent = new Intent(this, FirstClass.class); 
} else { 
    intent = new Intent(this, SecondClass.class); 
} 
startActivity(intent); 
finish(); 
// note we never called setContentView() 
} 

Altre Attività (FirstClass/secondClass):

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
} 
Problemi correlati