繁体   English   中英

RecyclerViewAdapter 中的设置器不起作用?

[英]Setter in RecyclerViewAdapter not working?

我的 onBindViewHolder 中有一个 boolean ,它决定按钮是否可点击。 在构造函数中,我将此值设置为 false,稍后当用户解锁某些内容时,我想使用 setter 将其设置为 true。

这是我的 RecyclerViewAdapter.java:

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

    private ArrayList<Items> items;
    Context mContext;
    private boolean unlocked;

    public RecyclerViewAdapter(Context context, ArrayList<Items> items, boolean unlocked) {
        mContext = context;
        this.items = items;
        this.unlocked = tabUnlocked;
    }

    public void setUnlocked(boolean unlocked) {
        this.unlocked = unlocked;
        this.notifyDataSetChanged();
    }

    @NonNull
    @Override
    public RecyclerViewAdapter.iewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        v.setLayoutParams(lp);
        return new RecyclerViewAdapter.ViewHolder(v);
    }




    @Override
    public void onBindViewHolder(@NonNull final RecyclerViewAdapter.ViewHolder holder, int position) {
        final Items currentItem = items.get(position);

        final String name = currentItem.getName();
        holder.itemTextView.setText(name);

  
        holder.itemTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (unlocked) {
                     //do something
                }
            }
        }); 
    }

 

    @Override
    public int getItemCount() {
        return item.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView itemTextView; 

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            itemTextView = itemView.findViewById(R.id.textViewItem); 
        }
    }



}

下面是我如何调用 Setter 来更改它:我将 RecyclerView 公开:

public RecyclerViewAdapter adapter;

然后我在我的 onCreate 中创建一个实例:

recyclerView = rootView.findViewById(R.id.recyclerView); 
adapter = new RecyclerViewAdapter(items);
recyclerView.setAdapter(adapter);

当用户解锁某个东西时,我调用当前 Class 的这个方法:

public void unlockTab() {
 
    adapter.setUnlocked(true); 

}

当我在该设置器中记录 boolean 时,它告诉我它已更改。 但是当我在 onBindViewHolder 中记录 boolean 时,它仍然是错误的。

为什么setter方法没有将整个RecyclerViewAdapter.java class中的boolean设置为true?

希望可以有人帮帮我!

编辑我已经尝试添加“this.notifyDataSetChanged();” 到 Setter 方法(感谢 @a_local_nobody)

适配器负责对 recyclerviews 的更改。 但如果你不告诉他们发生了什么变化,他们就不会知道这样做。

调用notifyDataSetChanged();

public void unlockTab() {
 
    adapter.setUnlocked(true); 
    adapter.notifyDataSetChanged();

}

它有什么作用?

它告诉您的 recyclerview 再次绑定所有数据,因此您的更改将适用

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM