android - 在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);
}
}
}
解决方案
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);
}
推荐阅读
- python-3.x - 如何通过输入/答案在 Python 中产生打字效果?
- rspec - 确定为什么 bundler 加载文件需要这么长时间?
- python - 如何使用 pytest、fastapi 和 tortoise-orm 回滚每个测试?
- python - Squarespace 使用 curl 和 python 不返回任何数据
- javascript - 使用标签内的标题保留内部文本
- c++ - Xcode 不会关闭
- rest - REST API 是否应该定义不同于成功响应的错误响应?
- javascript - 如何在 Javascript animate API(动画)和以下代码之间添加时间间隔
- android - 如何在 AppGallery 中发布 apk 而无需创建具有不同包的应用程序副本
- python - 无法在 Mac OS X 上安装 dlib 库