1

私はAndroidプログラミングにかなり慣れていないので、正しく行っていない単純なものがあると確信しています。共有設定ファイルにアクセスする 2 つのアクティビティがあります。1 つはそこから読み取って内容をリストに表示し、もう 1 つは内容を読み取り、ユーザー入力に基づいて新しい項目をリストに追加します。私が抱えている問題: ファイルからコンテンツを読み取ってリストに新しい項目を追加しようとすると、元のリストが上書きされます。多分それは実際に起こっていることではないかもしれませんが、これが問題であるように私には思えます。子アクティビティから新しいアイテムを追加し、リストを表示する元のアクティビティに戻ると、保存した最新のアイテムのみが表示され、以前に作成した他のアイテムは表示されません。

最初のアクティビティはメイン アクティビティであり、単純に共有設定を読み取り、項目をコンマで区切って文字列に追加し、リストビューに表示します。リストビューにアイテムを表示する方法のみを示しました。

    public void addItems() {
    String strLists="";
    SharedPreferences sharedPref = getSharedPreferences("ListNamesFile", MODE_PRIVATE);
    strLists = sharedPref.getString(getString(R.string.edit_message), strLists);
    listItems.clear();
    String[] myLists = strLists.split(",");
    for(int r=0;r<myLists.length;r++){
        listItems.add(myLists[r].toString());
    }
    //test adding an extra list item to make sure that the issue isn't from adding 
    //items to the listview
    //listItems.add("test");
    adapter.notifyDataSetChanged();
    }

2 番目のアクティビティは、エディット テキスト コントロールから新しい文字列を取得し、それを文字列の末尾にリスト項目とともに追加して、変更を共有設定ファイルにコミットするためのものです。共有設定を取得し、文字列の末尾に新しい項目を書き込むメソッドを含めました。

    public void createListOnClick(View view){
    //create a file for storing list items
    SharedPreferences sharedPref = getSharedPreferences("ListNamesFile", MODE_PRIVATE);
    String strMyLists = "";
    sharedPref.getString(getString(R.string.edit_message),strMyLists);
    String[] lists = strMyLists.split(",");
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < lists.length; i++) {
        sb.append(lists[i]);
        sb.append(",");
    }
    SharedPreferences.Editor editor = sharedPref.edit();
    EditText txtListName = (EditText)findViewById(R.id.txt_list_name);
    sb.append(txtListName.getText().toString());
    editor.putString(getString(R.string.edit_message), sb.toString());
    editor.commit();
    finish();
    }

私が見逃しているのは単純なものに違いないようですが、私はそれを理解することができなかったので、どんな助けも大歓迎です.

4

3 に答える 3

1

strMyLists で sharedPref 値をまだ割り当てていません。

于 2013-09-15T07:22:06.803 に答える
0

2 番目のアクティビティでは、実際には読み取り共有設定を割り当てていません。

交換する必要があります

sharedPref.getString(getString(R.string.edit_message),strMyLists);

strMyLists = sharedPref.getString(getString(R.string.edit_message),strMyLists);

于 2013-09-15T04:19:36.927 に答える
0

getString メソッドで

sharedPref.getString(getString(R.string.edit_message),strMyLists);

2 番目の引数はデフォルト値です。だからあなたは書かなければならないでしょう。

strMyLists = sharedPref.getString(getString(R.string.edit_message),"");

これで動作します。コードの残りの部分は良好です。

于 2013-09-15T04:25:35.137 に答える