android - 如何在其适配器的 onBindViewHolder 中更新 recyclerView?

标签 android android-recyclerview

我在 recyclerView 中制作了一张卡片列表。当卡持有一段时间后,其在数据库中的相应条目将被删除,因此之后必须将卡移除。这可以通过调用设置新的更新适配器来完成。但是我无法在 onBindViewHolder 中使用 setAdapter 函数,因为我不知道如何获得相同的 recyclerView。请帮忙。

代码:

public class RecyclerViewAdapterMain extends RecyclerView.Adapter<RecyclerViewAdapterMain.ViewHolder> {

String[] strings;
DBManager dbManager;

public RecyclerViewAdapterMain(String[] arrayList) {
    this.strings = arrayList;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_list,parent,false);
    ViewHolder viewHolder = new ViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.textView.setText(strings[position]);
    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(holder.itemView.getContext(),SecondActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("list",strings[position]);
            intent.putExtras(bundle);
            holder.itemView.getContext().startActivity(intent);
            //overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);
        }
    });
    holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(final View view) {
            DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which){
                        case DialogInterface.BUTTON_POSITIVE:
                            dbManager = new DBManager(holder.itemView.getContext(),null,null,1);
                            dbManager.deleteList(strings[position]);
                            String[] strings = dbManager.showLists();
                            RecyclerViewAdapterMain recyclerViewAdapter = new RecyclerViewAdapterMain(strings);
                            //I WANT TO SET UPDATED ADAPTER HERE
                            break;

                        case DialogInterface.BUTTON_NEGATIVE:
                            //No button clicked
                            break;
                    }
                }
            };
            AlertDialog.Builder builder = new AlertDialog.Builder(holder.itemView.getContext());
            builder.setMessage("Are you sure that you want to delete \""+strings[position]+"\"?").setPositiveButton("Yes", dialogClickListener)
                    .setNegativeButton("No", dialogClickListener).show();
            return true;
        }
    });


}

@Override
public int getItemCount() {
    return strings.length;
}

public class ViewHolder extends RecyclerView.ViewHolder{
    CardView cardView;
    TextView textView;
    public ViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.textView);
        cardView = (CardView) itemView.findViewById(R.id.cardView);
    }
}

最佳答案

在onBindViewHolder中的Adapter类中写

photolist.remove(i);
notifyItemRemoved(i);
notifyItemRangeChanged(i, photolist.size());
notifyDataSetChanged();

关于android - 如何在其适配器的 onBindViewHolder 中更新 recyclerView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38000302/

相关文章:

android - 为什么我的 JSON 数据没有显示在我的 recyclerview 中

java - 使用 FirebaseRecyclerAdapter 将 Firebase 实时数据库中的数据检索到 Recycler View 中

java - boolean 值在 RecyclerView 中单击按钮时不起作用

android - 覆盖 RecyclerView.Adapter 中 notifyItemChanged 的​​动画

android - 在 Wireshark 中看不到我手机的 WiFi 流量?

Android:如何在网格中的每个框内制作按钮和复选框?

Android:设备旋转后我的应用程序出现奇怪问题,有 1 个 fragment

安卓 Intent : Start activity using class name from another app that has the same sharedUserId

javascript - 是否可以在 Kitkat 中的 android webview 中使用 html5 语音 API?

android - 输入并存储到数组