2010-09-05 7 views
1

J'ai travaillé sur mon application et j'en suis arrivé au point où je dois comprendre le cycle de vie de l'activité et je ne pense pas l'avoir. Ce que j'ai est une activité avec sept boutons dessus. Lorsqu'un utilisateur appuie sur un bouton, il ouvre une listeActivité dans laquelle un utilisateur peut choisir un élément dans la liste, le titre est renvoyé à l'activité appelante et l'activité d'appel ajoute le titre à côté du texte sur le bouton. (La méthode qu'il utilise est dans une instruction switch qui dépend du code de requête qui lui revient - je pense que c'est un peu faible pour mes besoins.) Mais si l'utilisateur quitte l'activité et y revient, via le bouton retour ou tout autre bouton, aucune des informations supplémentaires est là quand ils reviennent - tout ce qui reste sont les sept boutons avec leur texte d'origine. Je voudrais que l'information reste - comment je m'y prend?Android onPause() ou saveInstanceState()?

Voici le code de l'appel Activité:

package com.dinner.live; 

import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.SimpleCursorAdapter; 
import android.widget.Toast; 

public class PlanMenu extends Activity { 

static final private int CHOOSE_MONDAY = 0; 
static final private int CHOOSE_TUESDAY = 1; 
static final private int CHOOSE_WEDNESDAY = 2; 
static final private int CHOOSE_THURSDAY = 3; 
static final private int CHOOSE_FRIDAY = 4; 
static final private int CHOOSE_SATURDAY = 5; 
static final private int CHOOSE_SUNDAY = 6; 
private boolean ButtonPushed = false; 
private NotesDbAdapter mDbHelper; 
private MenuDbAdapter menuDbHelper; 
private Long menuID; 
private String mTitleText; 
private String m; 

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

    setContentView(R.layout.plan_menu); 

    Toast.makeText(this, "Choose a day to pick a meal for!", Toast.LENGTH_LONG).show(); 
    mDbHelper = new NotesDbAdapter(this); 
     mDbHelper.open(); 
     menuDbHelper = new MenuDbAdapter(this); 
     menuDbHelper.open(); 
    } 

public void mButtonHandler(View target) 
    { 
    switch(target.getId()) 
    { 
    case R.id.monday: 
    if(ButtonPushed == false) 
    { 
    // Create new intent object and tell it to call the ColorPicker class 
    Intent monday = new Intent(this, PlanMenuList.class); 
    // Start ColorPicker as a new activity and wait for the result 
    startActivityForResult(monday, CHOOSE_MONDAY); 
    ButtonPushed = true; 
    break; 
    } 
    else 
    Toast.makeText(this, "That button has already been pushed." , Toast.LENGTH_LONG).show(); 
    break; 
    case R.id.tuesday: 
    // Create new intent object and tell it to call the ColorPicker class 
     Intent tuesday = new Intent(this, PlanMenuList.class); 
     // Start ColorPicker as a new activity and wait for the result 
     startActivityForResult(tuesday, CHOOSE_TUESDAY); 
     break; 
    case R.id.wednesday: 
    // Create new intent object and tell it to call the ColorPicker class 
     Intent wednesday = new Intent(this, PlanMenuList.class); 
     // Start ColorPicker as a new activity and wait for the result 
     startActivityForResult(wednesday, CHOOSE_WEDNESDAY); 
     break; 
    case R.id.thursday: 
    // Create new intent object and tell it to call the ColorPicker class 
     Intent thursday = new Intent(this, PlanMenuList.class); 
     // Start ColorPicker as a new activity and wait for the result 
     startActivityForResult(thursday, CHOOSE_THURSDAY); 
     break; 
    case R.id.friday: 
    // Create new intent object and tell it to call the ColorPicker class 
     Intent friday = new Intent(this, PlanMenuList.class); 
     // Start ColorPicker as a new activity and wait for the result 
     startActivityForResult(friday, CHOOSE_FRIDAY); 
     break; 
    case R.id.saturday: 
    // Create new intent object and tell it to call the ColorPicker class 
     Intent saturday = new Intent(this, PlanMenuList.class); 
     // Start ColorPicker as a new activity and wait for the result 
     startActivityForResult(saturday, CHOOSE_SATURDAY); 
     break; 
    case R.id.sunday: 
    // Create new intent object and tell it to call the ColorPicker class 
     Intent sunday = new Intent(this, PlanMenuList.class); 
     // Start ColorPicker as a new activity and wait for the result 
     startActivityForResult(sunday, CHOOSE_SUNDAY); 
     break; 
    } 



    } 


@Override 
    protected void onActivityResult(int requestCode, int resultCode, 
            Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     if(resultCode == RESULT_OK){ 
     switch(requestCode) 
     { 
      case CHOOSE_MONDAY: 
      menuID = intent.getExtras().getLong("newRowId"); 
       menuDbHelper.fetchMenu(menuID); 
      populateFields(); 
      //String label = intent.getExtras().getString("menuString");//intent.getExtras().getLong(MenuDbAdapter.KEY_ROWID); 
      Button tv = (Button)findViewById(R.id.monday); 
      m = mTitleText; 
      tv.setText("Monday" + " - " + mTitleText); 
      break; 
      case CHOOSE_TUESDAY: 
      String labelT = intent.getExtras().getString("menuString");//intent.getExtras().getLong(MenuDbAdapter.KEY_ROWID); 
      Button tvT = (Button)findViewById(R.id.tuesday); 
      tvT.setText("Tuesday" + " - " + labelT); 
      break; 
      case CHOOSE_WEDNESDAY: 
      String labelW = intent.getExtras().getString("menuString");//intent.getExtras().getLong(MenuDbAdapter.KEY_ROWID); 
      Button tvW = (Button)findViewById(R.id.wednesday); 
      tvW.setText("Wednesday" + " - " + labelW); 
      break; 
      case CHOOSE_THURSDAY: 
      String labelTh = intent.getExtras().getString("menuString");//intent.getExtras().getLong(MenuDbAdapter.KEY_ROWID); 
      Button tvTh = (Button)findViewById(R.id.thursday); 
      tvTh.setText("Thursday" + " - " + labelTh); 
      break; 
      case CHOOSE_FRIDAY: 
      String labelFriday = intent.getExtras().getString("menuString");//intent.getExtras().getLong(MenuDbAdapter.KEY_ROWID); 
      Button tvFriday = (Button)findViewById(R.id.friday); 
      tvFriday.setText("Friday" + " - " + labelFriday); 
      break;   
      case CHOOSE_SATURDAY: 
      String labelS = intent.getExtras().getString("menuString");//intent.getExtras().getLong(MenuDbAdapter.KEY_ROWID); 
      Button tvS = (Button)findViewById(R.id.saturday); 
      tvS.setText("Saturday" + " - " + labelS); 
      break; 
      case CHOOSE_SUNDAY: 
      String labelSa = intent.getExtras().getString("menuString");//intent.getExtras().getLong(MenuDbAdapter.KEY_ROWID); 
      Button tvSa = (Button)findViewById(R.id.sunday); 
      tvSa.setText("Sunday" + " - " + labelSa); 
      break; 

     } 

     } 
} 

private void populateFields() { 
     if (menuID != null) { 
      Cursor note = menuDbHelper.fetchMenu(menuID); 
      startManagingCursor(note); 
      mTitleText = (note.getString(
       note.getColumnIndexOrThrow(MenuDbAdapter.KEY_TITLE))); 

     } 
    } 




} 
+0

J'ai formaté votre code, mais c'est toujours un gâchis. Nettoyez-le un peu, coupez-le en portions appropriées et vous obtiendrez une meilleure réponse. –

Répondre

2

Depends. En général, vous devrez remplacer onSaveInstanceState() et enregistrer toutes les données dans le Bundle (c'est une simple paire clé/valeur) et recréer cela dans onCreate() (ou onRestoreInstanceState(), si vous voulez séparer le code en dehors). Cependant, ceci est principalement pour les cas où l'application est détruite et recréée parce que l'utilisateur a changé l'orientation. Si vous voulez que les données soient persistantes (c'est-à-dire que vous allez à cette activité, revenez à l'activité d'appel, passez éventuellement à une application différente, puis revenez), je recommande de tout sauvegarder dans vos SharedPreferences dans onPause () et remettez-le en place dans onResume(). De cette façon, les données seront stockées de manière persistante et survivront même à une réinitialisation du système.

+0

Cool, merci. Je n'ai jamais regardé SharedPreferences, donc c'est là que je vais commencer. – Will

+0

Très bien, j'ai été chasser et je ne fais pas quelque chose de bien. Je pense que la raison pour laquelle je ne peux pas enregistrer l'état de l'activité est la mise en page qui est appelée lorsque l'utilisateur revient à l'activité. Y a-t-il une meilleure façon de gérer cela? – Will

+0

Pouvez-vous être plus précis? Qu'est-ce qui ne fonctionne pas? – EboMike

Questions connexes