Setter RecyclerView Adapter 不工作?
Setter in RecyclerViewAdapter not working?
我的 onBindViewHolder 中有一个布尔值,它决定按钮是否可点击。
在构造函数中,我将此值设置为 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:
public RecyclerViewAdapter adapter;
然后我在 onCreate 中创建一个实例:
recyclerView = rootView.findViewById(R.id.recyclerView);
adapter = new RecyclerViewAdapter(items);
recyclerView.setAdapter(adapter);
而当用户解锁某个东西时我调用当前的这个方法Class:
public void unlockTab() {
adapter.setUnlocked(true);
}
当我在 setter 中记录布尔值时,它告诉我它已更改。
但是当我在 onBindViewHolder 中记录布尔值时,它仍然是 false。
为什么 setter 方法没有在整个 RecyclerViewAdapter.java class 中将布尔值设置为 true?
希望有人能帮助我!
编辑
我已经尝试添加“this.notifyDataSetChanged();” Setter 方法(感谢@a_local_nobody)
适配器负责对回收站视图的更改。但如果你不告诉他们发生了一些变化,他们就不会知道。
致电notifyDataSetChanged();
public void unlockTab() {
adapter.setUnlocked(true);
adapter.notifyDataSetChanged();
}
它有什么作用?
它会告诉您的 recyclerview 再次绑定所有数据,这样您的更改就会应用
我的 onBindViewHolder 中有一个布尔值,它决定按钮是否可点击。 在构造函数中,我将此值设置为 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:
public RecyclerViewAdapter adapter;
然后我在 onCreate 中创建一个实例:
recyclerView = rootView.findViewById(R.id.recyclerView);
adapter = new RecyclerViewAdapter(items);
recyclerView.setAdapter(adapter);
而当用户解锁某个东西时我调用当前的这个方法Class:
public void unlockTab() {
adapter.setUnlocked(true);
}
当我在 setter 中记录布尔值时,它告诉我它已更改。 但是当我在 onBindViewHolder 中记录布尔值时,它仍然是 false。
为什么 setter 方法没有在整个 RecyclerViewAdapter.java class 中将布尔值设置为 true?
希望有人能帮助我!
编辑 我已经尝试添加“this.notifyDataSetChanged();” Setter 方法(感谢@a_local_nobody)
适配器负责对回收站视图的更改。但如果你不告诉他们发生了一些变化,他们就不会知道。
致电notifyDataSetChanged();
public void unlockTab() {
adapter.setUnlocked(true);
adapter.notifyDataSetChanged();
}
它有什么作用?
它会告诉您的 recyclerview 再次绑定所有数据,这样您的更改就会应用