如何在列表中添加新项目时更新回收器查看适配器数据



我正在开发一项功能,其中我已将FooterView添加到我的RecyclerView中。我正在通过单击页脚视图中的"+"图标在列表中添加一个新项目。已成功从片段和数据添加到 ArrayList 中的项已添加到本地数据库,但列表中尚未添加新列表项,因为适配器无法同时更新。当我转到另一个屏幕然后返回此屏幕时,我能够看到该项目。我试图这样做,但不能这样做。

适配器代码 : '公共类 RecyclerViewAdapter 扩展 RecyclerView.Adapter {

private static final int TYPE_HEADER = 0;
private static final int TYPE_FOOTER = 1;
private static final int TYPE_ITEM = 2;

private Activity activity;
ArrayList<ModelUnrecognisedCode> modelUnrecognisedCodesArrayList;
FinalizePreOrde finalizePreOrderFragment;
ModelUnrecognisedCode modelUnrecognisedCode;
public RecyclerViewAdapter(Activity activity, ArrayList<ModelUnrecognisedCode> modelUnrecognisedCodesArrayList, FinalizePreOrde finalizePreOrderFragment) {
this.activity = activity;
this.modelUnrecognisedCodesArrayList = modelUnrecognisedCodesArrayList;
this.finalizePreOrderFragment = finalizePreOrderFragment;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
//Inflating recycle view item layout
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_unrecognised_item, parent, false);
return new ItemViewHolder(itemView);
} else if (viewType == TYPE_FOOTER) {
//Inflating footer view
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_view, parent, false);
return new FooterViewHolder(itemView);
} else return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

if (holder instanceof FooterViewHolder) {
final FooterViewHolder footerHolder = (FooterViewHolder) holder;
footerHolder.imgAddMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finalizePreOrderFragment.addView(footerHolder.etCode.getText().toString(), position);
}
});

} else if (holder instanceof ItemViewHolder) {
final ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
modelUnrecognisedCode = modelUnrecognisedCodesArrayList.get(position);
itemViewHolder.etCode.setText(modelUnrecognisedCode.getUnrecognised_code());

}
}
@Override
public int getItemViewType(int position) {
if (position == modelUnrecognisedCodesArrayList.size()) {
return TYPE_FOOTER;
}
return TYPE_ITEM;
}
@Override
public int getItemCount() {
return modelUnrecognisedCodesArrayList.size() + 1;
}

'

在页脚部分内的 BindView 持有人中,我添加了代码以单击"+"图标并在列表中添加新项目

footerHolder.imgAddMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finalizePreOrderFragment.addView(footerHolder.etCode.getText().toString(), position);
}
});

现在我的片段代码添加新的

public void addView(String code, int position) {
ModelUnrecognisedCode modelUnrecognisedCode = new ModelUnrecognisedCode();
modelUnrecognisedCode.setUnrecognised_code(code);
modelUnrecognisedCode.setUnrecognised_comment("comment");
modelUnrecognisedCode.setShop_id("1");
modelUnrecognisedCode.setShop_name_fr("fr");
modelUnrecognisedCode.setShop_name_nl("nl");
databaseHelper.addUnrecognisedCode(modelUnrecognisedCode);
modelUnrecognisedCodesArrayList = databaseHelper.getUnrecognisedCode();
adapterUnrecognisedCode.notifyItemInserted(position);
adapterUnrecognisedCode.notifyItemRangeChanged(position, modelUnrecognisedCodesArrayList.size());
adapterUnrecognisedCode.notifyDataSetChanged();
Log.e("TAG", "unrecognised code: " + modelUnrecognisedCodesArrayList.size());
}

我可以在 ArrayList 中添加该项目,但当我按回去然后再次返回时适配器未更新,然后我能够看到该项目。请帮忙

尝试清除列表,再次添加所有项目,然后通知更改。像这样:

list.clear()
list.addAll(yourUpdatedList)
adapter.notifyDataSetChanged()

你试过吗:RecyclerView.adapter.notifyDataSetChanged()它对我有用,可以直接更新您的RecyclerView

如果我收到您的问题,您不会在列表中添加新项目 将新添加的项目添加到列表中,然后通知更改

modelUnrecognisedCodesArrayList .add(modelUnrecognisedCode(;

public void addView(String code, int position) {
ModelUnrecognisedCode modelUnrecognisedCode = new ModelUnrecognisedCode();
modelUnrecognisedCode.setUnrecognised_code(code);
modelUnrecognisedCode.setUnrecognised_comment("comment");
modelUnrecognisedCode.setShop_id("1");
modelUnrecognisedCode.setShop_name_fr("fr");
modelUnrecognisedCode.setShop_name_nl("nl");
databaseHelper.addUnrecognisedCode(modelUnrecognisedCode);
modelUnrecognisedCodesArrayList = databaseHelper.getUnrecognisedCode();
modelUnrecognisedCodesArrayList .add(modelUnrecognisedCode);
adapterUnrecognisedCode.notifyItemInserted(position);
adapterUnrecognisedCode.notifyItemRangeChanged(position, 
modelUnrecognisedCodesArrayList.size());
adapterUnrecognisedCode.notifyDataSetChanged();
Log.e("TAG", "unrecognised code: " + modelUnrecognisedCodesArrayList.size());
}

相关内容

最新更新