Domanda

Ho fatto un'app di registrazione dei dati rudimentali, che dovrebbe avere i valori di input dell'utente in un numero dinamico e spesso elevato di visualizzazioni di editext. Una volta che l'utente ha terminato l'immissione di tutti i dati, è possibile premere un pulsante che scatta un'immagine della voce di dati (porta con me sulla memorizzazione dell'ingresso come immagine, ci sono motivi specifici per questo) e salva l'immagine alla memoria .

Problema: Funziona molto bene, ad eccezione di un problema particolare. A volte, quando l'utente mette il telefono in minimo (che si verifica frequente prima che l'ingresso venga salvato in realtà), tutto l'ingresso nelle viste di editext si cancellerà (rendendolo una persona molto arrabbiata / triste). Inoltre, è mai successo quando sono in campo e non riesco a guardare i file di registro in Eclipse per capire quali metodi potrebbero essere chiamati diversamente dal normale.

Domanda: Perché i valori dei miei editiexts persistono la maggior parte del tempo in cui il telefono va da e verso il minimo, eppure si chiariscono su occasioni apparentemente casuali (e spesso scomodi)?

Ho la sensazione che questo sia causato da OnSTOP () essere chiamati invece di in onpessa () (o forse viceversa) in determinate occasioni, ma la mia conoscenza di questi metodi non è ancora completamente all'altezza della velocità. Inoltre, sono consapevole del fatto che questo problema potrebbe essere risolto tramite un file di condividoreferences (o qualche idea), ma vorrei sapere cosa si sta verificando per la comprensione più di ogni altra cosa.

Dettagli:

-Sono sicuro che se qualcuno di questo codice potrebbe essere pertinente alla domanda in modo significativo, ma includerò uno snippet del mio metodo ONCreate () se aiuta. Fammi sapere se dovrei aggiungere altro:

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

    Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent
.

-Lo non ho sovrascritto nessuno dei metodi di ciclo di vita (I.e. Onstop (), onresume (), ecc.) Tranne ONCREATE (). Nessuno degli altri metodi nella mia attività dovrebbe avere nulla a che fare con il problema / per quanto posso dire

È stato utile?

Soluzione

Credo che il problema sia quello a volte in cui la tua app sta andando "inattiva" (cioè andare sullo sfondo, schermare) che Android lo sta automaticamente pulendo e distruggendo tutti i dati, incluso quello nel EditTexts. .

.

Se un'attività è in pausa o interrotta, il sistema può far cadere l'attività dalla memoria facendolo chiedendo di finire o semplicemente uccidere il suo processo. Quando viene visualizzato di nuovo all'utente, deve essere completamente riavviato e ripristinato nel suo stato precedente.

http://developer.android.com/reference/android/app /Ctity.html

Per risolvere questo problema è possibile sovrascrivere il metodo onSavedInstanceState() per salvare i valori EditText e quindi onCreate() estraerà questi valori quando tornerà all'attività. Avrai quindi bisogno di un assegno in posizione per vedere se è necessario ripopolare il tuo EditTexts da tali valori o se fossero null. Più su questo qui .

Altri suggerimenti

Questo probabilmente sta accadendo perché il metodo OnDestroy o OnPause è chiamato nel tempo di inattività.L'OnDestroy sarebbe stato chiamato in confezione, la memoria è l'utilizzo di app è elevata.L'unica soluzione a mio avviso è quella di salvare i dati in un DB locale in quanto viene inserito e lo popolarlo su onresume.

Per risolvere il tuo problema in onpausa () Metodo della tua attività Prendi i valori inseriti dall'utente nelle variabili statiche (è necessario il numero di variabili quanto editText hai) e memorizza i valori in variabili e in onresume () Metti indietro i valori a EdiText.

package com.zeus.program;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;

public class MainActivity extends Activity {

    public static String username;
    public static String password;


    EditText usernameET;
    EditText passwordET;


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

        usernameET = findViewById(R.id.username);
        passwordET = findViewById(R.id.password);
    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        usernameET.setText(username);
        passwordET.setText(password);

    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();

        username = usernameET.getText().toString();
        password = passwordET.getText().toString();

    }   
}
.

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