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
Utilizzare le preferenze per memorizzare i valori (Condizioni) che si desidera avere. quindi in base a tale modifica, startActivity.
è 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.
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);
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.
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");
}
}
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();
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);
}
Funziona bene. –
ha bisogno di layout ?? –