Android - Como retener datos en un textview

 
Vista:
sin imagen de perfil
Val: 194
Plata
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como retener datos en un textview

Publicado por Luis (97 intervenciones) el 11/01/2017 00:15:05
Hola a todos y feliz año nuevo.

En esta ocasion intento mantener unos datos dentro de un textview pero se me borran.

Me explico.

Desde la activity principal necesito traerme unos datos de un listview que tengo en otra activity y mostrarlos en un textview en la actividad principal, lo cualo lo consigo exitosamente de esta manera.

Esta es la menera de como se envian los datos a la activity principal que es donde los necesito.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class colores extends AppCompatActivity {
    ListView myLista;
    Button enviardatos;
 
    String[] listaColores = {
 
                        "Lila",
                        "Verde",
                        "Azul",
                        "Amarillo",
                        "Rojo"};
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_colores);
 
        myLista = (ListView)findViewById(R.id.list);
        enviardatos = (Button)findViewById(R.id.enviardatos);
 
        ArrayAdapter<String> adapter
                = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice,
                listaColores);
        myLista.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        myLista.setAdapter(adapter);
 
        enviardatos.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent explicit_intent;
                explicit_intent = new Intent(getApplicationContext(),Formas.class);
                String selected = "";
 
                int cntChoice = myLista.getCount();
                SparseBooleanArray sparseBooleanArray = myLista.getCheckedItemPositions();
                for(int i = 0; i < cntChoice; i++){
                    if(sparseBooleanArray.get(i)) {
                        selected += myLista.getItemAtPosition(i).toString() + "\n";
 
                    }
                }
                explicit_intent.putExtra("colores",selected);
                startActivity(explicit_intent);
                finish();
            }
        });
    }
}

Y esta es la forma en que los recojo en la activity principal y los muestro en un textview.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formas);
 
        btbuscar = (Button) findViewById(R.id.bt_buscar);
        tvColores = (TextView) findViewById(R.id.tv_colores);
 
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null) {
            String datosColores = (String) extras.get("colores");//Obtengo los colores
            tvColores.setText(datosColores);
        }
    }


Ahora el problema que tengo es que si me voy a otra activity ( no a la que ya fui si no a otra ) a traer otros datos al regresar, los que ya tenia mostrandose en el textview ya no estan.

He provado usando onResume y onPause pero no los retiene.

Se me ocurre que podria guardarlos en una base de datos y luego recuperarlos pero no creo que sea lo mas habitual.

Alguna sujerencia por su parte ???

Gracias por su tiempo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 386
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como retener datos en un textview

Publicado por Francisco (347 intervenciones) el 11/01/2017 10:24:58
Estas cerrando la activity principal con el metodo finish();

quita esta linea y los datos que tenfgas en la activity principal se te conservaran.

Saludos ,Feliz año.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 194
Plata
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como retener datos en un textview

Publicado por Luis (97 intervenciones) el 14/01/2017 16:53:56
Hola primero que nada gracias Francisco por su pronta respuesta y disculpe mi tardanza en contestar ya que esta semana me fue imposible encender el Pc hoy ya sabado tenemos un respiro.

Disculpe pero creo que me explique mal, o no me entendieron.

En esta ocasion me explicare lo mas claramente posible y disculpen lo extenso de la explicacion y muy de agradecer de su tiempo que todos sabemos que es muy escaso.

Se que este proceso se puede hacer desde una misma activity pero quiero realizarlo de esta manera.

Disponemos de 3 avtivitys
Main_activity, Colores, y Plantas.

En Main_Activity tengo
2 textviews tvColores, tvPlantas
2 botones btañadir_Colores, btañadir_Plantas

Quiero mostrar en el tvColores los colores que se seleccionan en en la activity ( colores.java ) utilizando un listview simple_list_item_multiple_choice, listaColores)

Y en el otro textview tvPlantas quiero mostrar las plantas que se seleccionan en en la activity ( Plantas.java ) utilizando un listview simple_list_item_multiple_choice, listaPlantas).

Para ello desde Manin activity que es la activity principal uando un button me voy a la activity Colores.java para traerme los colores y mostrarlos en el textview tvColores de la activity principal Main_activity

Me voy de esta manera usando el btañadir_colores
1
2
3
4
5
6
7
8
9
btañadir_colores.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                Intent i = new Intent(getApplicationContext(), Colores.class);
                startActivity(i);
 
            }
        });

Una vez en la activity colores.java se seleccionan los colores con multiple_choice mediante un buton envio los colores seleccionados a la activity principal Main_activity.

Clase Colores.java.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class Colores extends AppCompatActivity {
    ListView myLista;
    Button enviardatos;
 
    String[] listaColores = {
 
            "Lila",
            "Verde",
            "Azul",
            "Amarillo",
            "Rojo"};
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_colores);
 
        myLista = (ListView)findViewById(R.id.list);
        enviardatos = (Button)findViewById(R.id.enviardatos);
 
        ArrayAdapter<String> adapter
                = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice,
                listaColores);
        myLista.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        myLista.setAdapter(adapter);
 
        enviardatos.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent explicit_intent;
                explicit_intent = new Intent(getApplicationContext(),MainActivity.class);
                String selected = "";
 
                int cntChoice = myLista.getCount();
                SparseBooleanArray sparseBooleanArray = myLista.getCheckedItemPositions();
                for(int i = 0; i < cntChoice; i++){
                    if(sparseBooleanArray.get(i)) {
                        selected += myLista.getItemAtPosition(i).toString() + "\n";
 
                    }
                }
                explicit_intent.putExtra("colores",selected);
                startActivity(explicit_intent);
                finish();
      // finalizo la activity ya que no lo necesitaremos mas
     //mas adelante utilizare las SharedPreferences para que si otro dia regresamos a esta activity 
     //se muestren marcados los colores que se seleccionaron en su dia
    // pero poco a poco
            }
        });
    }
}

Y ahora ya se muestran los colores seleccionados de Colores.java en el textview tvColores de nuestra activity Principal Main_activity.

De esta manera recibo los datos que me envia Colores.java y los muestro en esta Main_activity

1
2
3
4
5
6
7
Intent intent=getIntent();
        Bundle extras =intent.getExtras();
 
        if (extras != null) {
            String datosColores=(String)extras.get("colores");
            tvcolores.setText(datosColores);
        }

Hasta aqui todo bien, pero me falta traerme las plantas y mostrarlas en el tvPlantas junto al tvcolores que ya esta mostrando los colores que trajimos de colores.java.

Asi que en esta ocasion pulso el button btañadir_Plantas y me voy a la activity Plantas.java.
Igual que hicimos para irnos a buscar los colores

1
2
3
4
5
6
7
8
btañadir_plantas.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Plantas.class);
                startActivity(i);
 
            }
        });

Y una vez alli recojemos las plantas igual que hicimos con los colores y los enviamos a Main_activity pulsando el button enviardatos.

Clase plantas.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class Plantas extends AppCompatActivity {
    ListView myLista;
    Button enviardatos;
 
    String[] listaPlantas = {
 
            "Rosa",
            "Clavel",
            "Petunia",
            "Azafran",
            "Achillea",
            "Raimet",
            "Jazmin"};
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_colores);
        myLista = (ListView)findViewById(R.id.list);
        enviardatos = (Button)findViewById(R.id.enviardatos);
 
        ArrayAdapter<String> adapter
                = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice,
                listaPlantas);
        myLista.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        myLista.setAdapter(adapter);
 
        enviardatos.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent explicit_intent;
                explicit_intent = new Intent(getApplicationContext(),MainActivity.class);
                //   Toast.makeText(getApplicationContext(),"Hola", Toast.LENGTH_SHORT).show();
                String selected = "";
 
                int cntChoice = myLista.getCount();
                SparseBooleanArray sparseBooleanArray = myLista.getCheckedItemPositions();
                for(int i = 0; i < cntChoice; i++){
                    if(sparseBooleanArray.get(i)) {
                        selected += myLista.getItemAtPosition(i).toString() + "\n";
 
                    }
                }
                explicit_intent.putExtra("plantas",selected);
                startActivity(explicit_intent);
                finish();
         // finalizo la activity ya que no lo necesitaremos mas
          //mas adelante utilizare las SharedPreferences para que si otro dia regresamos a esta activity 
          //se muestren marcados los colores que se seleccionaron en su dia
         // pero poco a poco
            }
        });
    }
}


Y ahora es cuando me surge el problema y es que cuando Plantas.java nos envia de regreso a Main_activity con los datos plantas me muestra en el tvPlantas todas las plantas que se seleccionaron en la activity Plantas.java

Bien!!!!!

Pero el tvColores que ya contenia los colores se queda vacio en blanco no muestra ni su texto predefinido
1
android:text="esperando colores"

¿ Porque se eliminan ?

Cuando la activity Plantas.java estaba sin el codigo, una vez seleccionados los colores en colores.java y mostrando los colores en Main_activity podia ir a Plantas.java la cual me mostraba un hola mundo ya que no tenia puesto el codigo y al regresar a Main_activity seguian mostrandose los colores.

Pero ahora ya no los guarda.

Que me falta ???

Aqui pongo la activity principal main_activity que seguro me falta algo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
 
    Button btañadir_plantas,btañadir_colores;
    TextView tvplantas,tvcolores;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btañadir_colores = (Button)findViewById(R.id.bt_colores);
        btañadir_plantas = (Button)findViewById(R.id.bt_plantas);
        tvcolores = (TextView) findViewById( R.id.tv_colores );
        tvplantas= (TextView) findViewById( R.id.tv_plantas );
 
       Intent intent=getIntent();
        Bundle extrascolores =intent.getExtras();
        if (extrascolores != null) {
            String datosColores=(String)extrascolores.get("colores");
            tvcolores.setText(datosColores);
        }
 
 
        Intent intent2=getIntent();
        Bundle extrasplantas =intent2.getExtras();
        if (extrasplantas != null) {
            String datosPlantas=(String)extrasplantas.get("plantas");
            tvplantas.setText(datosPlantas);
        }
 
 
        btañadir_colores.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                Intent i = new Intent(getApplicationContext(), Colores.class);
                startActivity(i);
 
            }
        });
        btañadir_plantas.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Plantas.class);
                startActivity(i);
 
            }
        });
    }
}

Muchas gracias por su tiempo y disculpen por lo extenso.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar