简体   繁体   English

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

[英]How do I update recyclerView inside onBindViewHolder of its adapter?

I've made a list of cards inside recyclerView. 我在recyclerView里面制作了一张卡片列表。 When card is held for sometime, its corresponding entry in database is deleted so after that, the card must be removed. 当卡被保留一段时间后,其数据库中相应的条目将被删除,因此必须删除该卡。 It can be done by calling setting new updated adapter. 可以通过调用设置新的更新适配器来完成。 But I'm unable to use setAdapter function inside onBindViewHolder because I don't know how to get same recyclerView. 但是我无法在onBindViewHolder中使用setAdapter函数,因为我不知道如何获得相同的recyclerView。 Please help. 请帮忙。

CODE: 码:

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);
    }
}

} }

Write in Adapter class in onBindViewHolder 在onBindViewHolder中的Adapter类中编写

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

You need to update your existing variable 您需要更新现有变量

String[] strings;

And then tell the RecyclerView to redraw the items. 然后告诉RecyclerView重绘项目。

notifyItemRemoved(position);

or 要么

notifyDataSetChanged();

You then get 然后你得到

case DialogInterface.BUTTON_POSITIVE:
                        dbManager = new DBManager(holder.itemView.getContext(),null,null,1);
                        dbManager.deleteList(strings[position]);
                        strings = dbManager.showLists();
                        notifyItemRemoved(position);
                        break;

试试这个

RecyclerViewAdapterMain.this.notifyItemRemoved(position);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在RecyclerView适配器的onBindViewHolder中声明overridePendingTransition? - How to declare overridePendingTransition inside onBindViewHolder of a RecyclerView adapter? 使用RecyclerView.Adapter在onBindViewHolder()内设置onItemClickListener - Set onItemClickListener inside onBindViewHolder() with RecyclerView.Adapter 如何在同一个 recyclerview 的适配器类中更新 recyclerview? - How can I update recyclerview inside the adapter class of the same recyclerview? 如何在RecyclerView的适配器的onBindViewHolder中使用滚动侦听器? - How to use scroll listener in onBindViewHolder in Adapter of a RecyclerView? RecyclerView适配器:OnBindViewHolder - RecyclerView Adapter :OnBindViewHolder Firebase RecyclerView Adapter onBindViewHolder - Firebase RecyclerView Adapter onBindViewHolder RecyclerView-如何将onBindViewHolder的位置传递给ViewHolder类? - RecyclerView - How do I pass the position of onBindViewHolder to my ViewHolder class? 在RecyclerView适配器中,如何在活动中修改onClickListener - In a RecyclerView adapter, how do I modify an onClickListener inside an activity Scrollview内部的Recyclerview未调用自定义适配器函数(onBindViewHolder) - Recyclerview inside a Scrollview not calling the Custom Adapter Function (onBindViewHolder) 从 RecyclerViewAdapter 启动BottomSheet,它在onBindViewHolder 内扩展了RecyclerView.Adapter - Launching BottomSheet from a RecyclerViewAdapter that extends with RecyclerView.Adapter inside onBindViewHolder
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM