2017-10-07 12 views
0

ユーザーが削除するまで、CustomListAdapterで設定したメモをそこに保存します。ユーザーがアプリを終了しても、電話が再起動しても、何か他のものが追加された場合は、削除するまでそこに残る必要があります。私はSharePreferencesを自分のタブで取得し、CustomListAdapterに設定して保存しようとしましたが、保存しません:CustomListAdapater SharedPreferences Appを閉じるときに状態を保存しない

後でその値を取得してメソッドを呼び出すことができるようにカウンタを追加しましたcustomerListAdapterにaddnoteを設定してSharedPreferencesを設定します。

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    final View v = inflater.inflate(R.layout.tab3, container, false); 

    final EditText notes = (EditText) v.findViewById(R.id.editText); 
    listView=(ListView)v.findViewById(R.id.list); 

    final int cross = R.drawable.cross; 
    notesofrules = new ArrayList<String>(); //initial data list 

    pref = getContext().getSharedPreferences("MyPref", MODE_PRIVATE); 
    editor = pref.edit(); 

    adapter = new CustomListAdapter(getActivity(), notesofrules, cross); 

    listView=(ListView) v.findViewById(R.id.list); 
    listView.setAdapter(adapter); //set the adapter once, only manipulate the data within 

    Button button = (Button)v.findViewById(R.id.button3); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) 
     { 
       String newNote = notes.getText().toString(); 
       adapter.addNote(newNote, counter, editor); //add new note to the adapter list 
       counter++; 
       adapter.notifyDataSetChanged(); //very important to notify adapter and refresh the listview 
       notes.setText(""); 

     } 
    }); 
    return v; 
} 

CustomListAdapter:

public class CustomListAdapter extends ArrayAdapter<String> { 

     private final Activity context; 
     private ArrayList<String> notes = new ArrayList<>(); 
     private ImageView image; 
     private int imageCross; //make this a list if you have multiple images and add similar to notes list 

     public CustomListAdapter(Activity context, ArrayList<String> notes, int imageCross) { 
      super(context, R.layout.item,notes); 
      // TODO Auto-generated constructor stub 
      this.context=context; 
      this.notes = notes; 
      this.imageCross = imageCross; 
     } 

     public View getView(final int position, View view, ViewGroup parent) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      final View rowView = inflater.inflate(R.layout.item, null, false); 

      final TextView ruleNotesSet = (TextView) rowView.findViewById(R.id.textView1); 
      image = (ImageView) rowView.findViewById(R.id.icon); 

      image.setImageResource(imageCross); 
      image.setOnClickListener(new Button.OnClickListener(){ 
       @Override 
       public void onClick(View v){ 
        notes.remove(position); 
        notifyDataSetChanged(); 

       } 
      }); 

      ruleNotesSet.setText(notes.get(position)); 
      return rowView; 
     } 

     public void addNote(String data, int position, SharedPreferences.Editor editor) { 
      editor.putString(Integer.toString(position), data); 
      editor.commit(); 
      notes.add(data); 
     } 
} 

私が間違っているところ、私はそれらを設定することができますどのように、見た後、customListAdapter中のonClick内でそれらを削除することができませんか?

編集:

私は、タブ内のこの追加しました:

adapter.getNotes(pref); 
listView.setAdapter(adapter); 

を、これはCustomListAdapterでgetNotes方法である:

public void getNotes(SharedPreferences pref) 
     { 
      for(String note : notes) { 
       pref.getString(note, note); 
      } 
     } 

はまだ一度閉じバック状態を設定していません。

私はまたaddNoteメソッドを編集した:

editor.putString(data, data); 
+0

あなたの質問にはたくさんのコードが含まれていますが、私はsharedpreference値をどこで取得しているのか分からないことがあります。 – Kunu

+0

ちょっと気付いたのは、私はcustomerAdapterにgetNotesを作成し、そこにprefsを渡しています。動作しない場合は更新し、試してみてください。 – Sam

+0

@ Kunu Sharepreferencesを取得するのにまだ動作していない新しいメソッドを追加しました – Sam

答えて

0

これはタブクラス内でこれを行うために管理されます。ユーザーがボタンをクリックするときにsharedpreferencesを設定する。その後、ビューを再度作成するときにnullであるかどうかを確認します。次に、すべての設定を取得し、マップに格納し、onCreate内のアダプタに渡します。うわー。誰かを助けることを願っています。

String notesInStorage = pref.getString(Integer.toString(counter), newNote); 

    if(notesInStorage != null) 
     { 
      Map<String,?> keys = pref.getAll(); 

      for(Map.Entry<String,?> entry : keys.entrySet()){ 

       notesofrules.add(entry.getValue().toString()); 
       adapter = new CustomListAdapter(getActivity(), notesofrules, cross); 
       listView.setAdapter(adapter); 
       adapter.notifyDataSetChanged(); 
      } 
     } 
0

uはuが SharedPreferences.Editorエディタ= getSharedPreferences(MY_PREFS_NAME、MODE_PRIVATE).editを()したいデータを保存するには、このコードを追加します。editor.putInt( "position"、position); editor.apply(); ; と取得する SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME、MODE_PRIVATE); Int position = prefs.getInt( "positon"、null); とそれを使用する

関連する問題