gpt4 book ai didi

android - 如何在列表中添加新项目时更新 RecyclerView 适配器数据

转载 作者:行者123 更新时间:2023-11-29 00:59:20 25 4
gpt4 key购买 nike

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

适配器代码:`public class RecyclerViewAdapter extends 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;
}

`

在页 footer 分的 BindView Holder 中,我添加了代码以单击“+”图标并在列表中添加新项目

footerHolder.imgAddMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

finalizePreOrderFragment.addView(footerHolder.etCode.getText().toString(), position);

}
});

现在我的 fragment 代码要添加新的

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

关于android - 如何在列表中添加新项目时更新 RecyclerView 适配器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52294428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com