Domanda

Sto creando un'applicazione in stile Wizard, in cui ho bisogno di mantenere vivi i dati dell'utente tra le attività A e B.A ha un pulsante morbido successivo e B ha un pulsante morbido posteriore.

Quando si utilizza FLAG_ACTIVITY_REORDER_TO_FRONT Posso mantenere vivi i dati dell'utente quando vengono utilizzati i pulsanti morbidi, perché ogni attività viene riutilizzata.

Ma, quando l'utente preme il pulsante Back hard da B, B muore, a causa di quel pulsante hard utilizza implicitamente finish ().

Poi, ho provato a sovrascrivere onBackPressed in B, aggiungendo ad esso lo stesso comportamento del mio pulsante soft Back, pensando che il pulsante Back hard si comporterà esattamente come il precedente pulsante (non finire B).

Ora, tornando da B a A con il tasto Back hard, va tutto bene.A questo punto con lo stato attivo in A, quando l'utente preme di nuovo il pulsante back hard, il comportamento previsto è che l'applicazione lascia.

Il problema è che il comportamento previsto non si verifica, dato che B è ancora vivo;in modo che overriden onBackPressed in B è ancora in ascolto, e qualche altro comportamento ocurr invece.

Come posso finire di ascoltare con l'overriden onBackPressed in B, in modo che quando il focus è in A l'applicazione lascia?

Grazie in anticipo.

È stato utile?

Soluzione 2

Bene, potrei risolvere il mio problema con una soluzione Android naturale:

Seguendo il suggerimento di Krylez, ho smesso di usare FLAG_ACTIVITY_REORDER_TO_FRONT, quindi non ho più conflitti con il pulsante hard, e ora sto riciclando l'Intento che avvia il mio wizard.

In A, ho un metodo molto comune che viene chiamato quando l'utente preme il pulsante Continua per andare su B.L'attività A è solo informativa, quindi non ha bisogno di mettere gli extra di Intent con i dati dell'utente quando si va a B, in questo modo:

    /** Called when the user presses the Continue button*/
public void continueButtonOnClick(View view) {

        Intent intent = this.getIntent();
        intent.setClass(this, StepOneRegisterWizardActivity.class);
        startActivity(intent);
}

Quando l'attività B inizia, deve sempre cercare se ci sono dati dell'utente disponibili negli extra di Intent, come questo:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_step_one_register_wizard);

    // Get the components of the content layout
    usernameEditText = (EditText)findViewById(R.id.usernameEditText);
    passwordEditText = (EditText)findViewById(R.id.passwordEditText);

    getIntentExtras();
}

private void getIntentExtras() {
    Intent intent = this.getIntent();

    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        usernameEditText.setText(bundle.getCharSequence("usernameEditText"));
        passwordEditText.setText(bundle.getCharSequence("passwordEditText"));
    }
}

Ora, forse da B, l'utente preme qualsiasi pulsante indietro disponibile (morbido o duro) per tornare a A.In questo caso, dobbiamo inserire i dati dell'utente negli extra di Intent, come questo:

    /** Called when the user presses the Back soft button*/
public void backButtonOnClick(View view) {
    onBackPressed();
}

@Override
/** Called when the user presses the Back hard button*/
public void onBackPressed() {
    finish();

    Intent intent = this.getIntent();
    intent.setClass(this, StepZeroRegisterWizardActivity.class);
    intent.putExtra("usernameEditText", usernameEditText.getText());
    intent.putExtra("passwordEditText", passwordEditText.getText());
    startActivity(intent);
}

Infine, quando l'utente preme nuovamente il pulsante Continua, la nuova attività B avrà i dati inseriti dall'utente las time.

Spero che aiuti qualcuno.

Altri suggerimenti

Considera di fare il commento di Krylez.O si potrebbe desiderare di utilizzare frammento.Se si target SDK che sono più vecchi di 3.x, vedi libreria di supporto.

Ci sono progetti di esempio all'interno della cartella SDK, che utilizzano lo stile wizard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top