0

私はいくつかの問題を抱えているアンドロイド開発に不慣れです。ユーザー入力に基づくリスト ビューを作成しました。ユーザーはダイアログ ボックスにカテゴリを入力する必要があり、それがリストに追加されます。魅力のように機能します。問題は、ユーザーがアプリを終了して再度起動したときに、これらのカテゴリをどのように保持するかです。ユーザーがアプリを起動すると、リストは空白になります。ユーザーが入力した内容を保存するために、設定画面などを作成する必要がありますか? これが私のコードです:

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
4

2 に答える 2

0

保存するデータの量が比較的少ない場合は、SharedPreferencesStringを使用してメソッドにデータを保存できます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 yourArrayAdapter` に追加してリストに設定します。

@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);
}
于 2013-06-27T02:19:31.317 に答える