首页 > 解决方案 > 在recyclerview中动态添加数据

问题描述

我想动态使用 ArrayList 将数据保存在 recyclerview 中,但我遇到了问题。
每次我在回收站视图中添加数据时,它都会替换以前的数据并只显示我输入的最后一个数据。
我正在使用 SharedPreference 将该值传递给像这样的下一个活动

 builder.setNeutralButton("Save", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            SharedPreferences sp = getSharedPreferences(mypreference,0);
            SharedPreferences.Editor editor = sp.edit();

            size = sp.getInt("size",size);
            size = size+1;
            editor.putString("name"+size , scanResult);
            editor.putInt("size" , size);
            editor.commit();

            finish();
        }
   });

这是我在 ArrayList 中添加数据的活动;

结果.java

 ArrayList<String> data = new ArrayList<>();

 pref = getSharedPreferences(mypreference,MODE_PRIVATE);
 int size = pref.getInt("size",0);
 String scanResult = pref.getString("name"+size,"");
 data.add(scanResult);
 listView_result = findViewById(R.id.listResult);
 LinearLayoutManager layoutManager = new 
 LinearLayoutManager(getApplicationContext());
 listView_result.setLayoutManager(layoutManager);
 ResultAdapter adapter = new ResultAdapter(Results.this, data);
 listView_result.setAdapter(adapter);

这是recyclerview的适配器

结果适配器.java

 public class ResultAdapter extends RecyclerView.Adapter<ResultAdapter.ViewHolder> {

     private Context context;
     private ArrayList<String> code;

     ResultAdapter(Context context , ArrayList<String> code) {
         this.context = context;
         this.code = code;
     }

     @NonNull
     @Override
     public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
          View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_text , parent , false);

          return new ViewHolder(v);
      }

      @Override
      public void onBindViewHolder(@NonNull ViewHolder holder, int position) 
      {
          holder.txt.setText( code.get(position));

      }

      @Override
      public int getItemCount() {
          return code.size();
      }

      class ViewHolder extends RecyclerView.ViewHolder {
          TextView txt;
          ViewHolder(View itemView) {
          super(itemView);
          txt = itemView.findViewById(R.id.textView_list);
       }
 }

}

标签: androidandroid-recyclerview

解决方案


int size = pref.getInt("size",0);
String scanResult = pref.getString("name"+size,"");
data.add(scanResult);

上面应该是

int size = pref.getInt("size",0);
for (int i = 0; i < size; ++i) {
  String scanResult = pref.getString("name"+i,"");
  data.add(scanResult);
}

推荐阅读