2013-06-26 2 views
0

Я новичок в разработке Android, имея некоторые проблемы. Я создал представление списка, основанное на пользовательском вводе. Пользователь должен ввести категорию в диалоговом окне, а затем добавить в список. Работает как шарм. Вопрос в том, как сохранить эти категории после выхода пользователя из приложения и повторного запуска? Когда пользователь запускает приложение, список пуст. Нужно ли создавать экран предпочтений или что-то, чтобы сохранить то, что пользователь набирает? Вот мой код:Сохранение элементов в представлении списка

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 

ответ

1

Вы можете сохранить его в SQLite DB, используйте CursorAdapter для просмотра списка.

0

Если сумма данных, которую вы хотите сохранить, относительно невелика, вы можете использовать SharedPreferences для сохранения данных String в вашем методе 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(); 
    } 
} 

Когда пользователь покидает вашу деятельность, использовать метод onStop() обратного вызова, чтобы сохранить List<Strings> и сохранить его через 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; 
} 

Использование onStart() обратного вызова, инициализировать List и SharedPreferences. Когда пользователь переходит к вашей активности, ваш список будет повторно инициализирован, когда он будет сохранен через onStop().

И, наконец, перейдите в свой список, добавьте свои товары в свой ArrayList', create your ArrayAdapter` и установите его в свой список.

@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); 
}