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

标签 android android-layout listview android-fragments android-recyclerview

我正在开发一项功能,将 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/

相关文章:

android - 如何创建这个可绘制的形状

android - 更改操作栏的颜色

android - 以编程方式将 ImageView 添加到布局

android - 如何将 Activity 放入 fragment 中?

android - Android ScrollView 中的 VerticalScrollExtent 是什么?

android - Paint.measureText : Is the sum of the parts equal to the whole?

android - 添加 fragment 并更新操作栏标题

android - 什么取代了 WearableListView.Adapter?

java - Android - 从另一个类调用时 MediaPlayer 不会释放

java - Settings.canDrawOverlays 权限授予问题