Sohaib Khan
Sohaib Khan

Reputation: 716

Adding data in recyclerview dynamically

I want to save data in recyclerview using ArrayList dynamically, but I'm having a problem.
Every time I add data in recycler view, it replaces the previous data and shows only the last data I have entered.
I'm passing that value using SharedPreference to next activity like this

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

This is the activity where I'm adding data in ArrayList;

Results.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);

This the adapter for recyclerview

ResultAdapter.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);
       }
 }

}

Upvotes: 2

Views: 3092

Answers (1)

AIMIN PAN
AIMIN PAN

Reputation: 1675

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

Above should be

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

Upvotes: 1

Related Questions