2013-06-26 1 views
0

Je suis nouveau dans le développement Android ayant quelques problèmes. J'ai créé une vue de liste basée sur l'entrée de l'utilisateur. L'utilisateur doit entrer une catégorie dans une boîte de dialogue, puis il est ajouté à la liste. Fonctionne comme un charme. La question est de savoir comment conserver ces catégories une fois que l'utilisateur quitte une application et le redémarre? Lorsque l'utilisateur démarre l'application, la liste est vide. Dois-je créer un écran de préférences ou quelque chose pour sauvegarder ce que l'utilisateur tape? Voici mon code:Retenir des éléments dans une vue de liste

public class MainActivity extends Activity { 

final Context context = this; 
ArrayAdapter<String> arrayAdapter; 
ArrayList<String> listItems = new ArrayList<String>(); 
ListView lv; 

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

    lv = (ListView)findViewById(R.id.listView1); 
    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listItems); 
    lv.setAdapter(arrayAdapter); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch(item.getItemId()){ 
    case R.id.menu_add_cat: 

     LayoutInflater li = LayoutInflater.from(context); 
     View promptAdd = li.inflate(R.layout.prompt_add, null); 

     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

     //set prompts.xml to alertDialogBuilder 
     alertDialogBuilder.setView(promptAdd); 

     final EditText etAddCat = (EditText)promptAdd.findViewById(R.id.etDialogInput); 

     //set a dialog message 
     alertDialogBuilder.setPositiveButton("Done", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      /* 
      * add a cat here 
      */ 
       String input = etAddCat.getText().toString(); 
       if(null != input && input.length() > 0){ 
        listItems.add(input); 
        arrayAdapter.notifyDataSetChanged(); 
       }else{ 
        Toast.makeText(getApplicationContext(), "Please enter a new category", Toast.LENGTH_LONG).show(); 

       } 
      } 
     }) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     // create alert dialog 
     AlertDialog alertDialog = alertDialogBuilder.create(); 

     // show it 
     alertDialog.show(); 
     break; 
    } 
    //return super.onOptionsItemSelected(item); 
    return true; 
} 

}// end of MainActivity 

Répondre

1

Vous pouvez l'enregistrer dans SQLite DB, utilisez CursorAdapter pour votre affichage de la liste.

0

Si la quantité de données que vous souhaitez enregistrer est relativement petite, vous pouvez utiliser SharedPreferences pour enregistrer les données String dans votre méthode onClick.

@Override 
public void onClick(DialogInterface dialog, int which) { 

    String input = etAddCat.getText().toString(); 
    if(null != input && input.length() > 0){ 
     listItems.add(input); 

     // Add all string data to List<String> listItem 
     listItem.add(input); 

     arrayAdapter.notifyDataSetChanged(); 

    }else{ 
     Toast.makeText(getApplicationContext(), "Please enter a new category", Toast.LENGTH_LONG).show(); 
    } 
} 

Lorsque l'utilisateur quitte votre activité, utilisez la méthode de rappel onStop() pour enregistrer votre List<Strings> et le stocker dans SharedPreferences.

@Override 
private void onStop() { 
    super.onStop(); 

    SharedPreferences.Editor editor = mSharedPreferences.edit(); 

    editor.putString(getResources().getString(R.string.list_of_strings), new HashSet<String>(listItem)); 
    editor.commit; 
} 

En utilisant la fonction de rappel onStart(), initialiser votre List et SharedPreferences. Lorsque l'utilisateur accède à votre activité, votre liste est réinitialisée lorsqu'elle a été enregistrée via onStop(). Enfin, passez en revue votre liste, ajoutez vos éléments à votre ArrayList', create your ArrayAdapter` et réglez-le sur votre liste.

@Override 
private onStart(){ 
    super.onStart(); 

    SharedPreferences mSharedPreferences; 

    mSharedPreferences = this.getApplicationContext().getSharedPreferences("MyPreferences", 0); 
    List<String> listItems = new ArrayList<String>(mSharedPreferences.getStringSet("ListOfStrings", null)); 

    ListIterator li = listItem.listIterator(0); 

    while (li.hasNext()) { 
     newStatusList.add((String)li.next()); 
    } 

    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listItems); 
    lv.setAdapter(arrayAdapter); 
} 
Questions connexes