2013-06-26 4 views
0

나는 몇 가지 문제가있는 android development를 처음 사용합니다. 사용자 입력을 기반으로하는 목록보기를 만들었습니다. 사용자는 대화 상자에 범주를 입력 한 다음 목록에 범주를 추가해야합니다. 매력처럼 작동합니다. 문제는 사용자가 앱을 종료하고 앱을 다시 시작하면 어떻게 해당 카테고리를 유지합니까? 사용자가 앱을 시작하면 목록은 비어 있습니다. 사용자가 입력 한 내용을 저장하기 위해 환경 설정 화면이나 다른 것을 만들어야합니까?목록보기에서 항목 유지하기

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

저장하려는 데이터의 양이 비교적 적은 경우 onClick 방법으로 String 데이터를 저장하려면 SharedPreferences을 사용할 수 있습니다.

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

사용자가 활동을 잎

, 당신의 List<Strings>을 저장하고 SharedPreferences를 통해 저장하기 onStop() 콜백 메소드를 사용합니다.

@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() 콜백을 사용하여 초기화하여 ListSharedPreferences. 사용자가 활동으로 이동할 때 목록은 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); 
}