Reputation: 716
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
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