我将创建一个活动。
.xml
创建一个ROW
。在这一行中,我将采用Cardview,TextView,CheckBox,Image等。现在我将在此适配器声明复选框和图像中创建一个adapter.class
并初始化两个小部件。
现在我想要检查复选框,然后按钮可以visible
。如果未选中复选框,则按钮为gone
为此我将尝试adapter.class
中的代码:
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(checkBox.isChecked()){
btnDownload.setVisibility(View.VISIBLE);
}
}
});
但问题是btnDownload
是空对象引用错误可以显示。
我知道为什么这个错误来自becoz Button
可以在Activity中声明我将在adapter.class
中使用然后错误可以显示但很热我解决了这个
如何在适配器android ???
中使用活动按钮答案 0 :(得分:1)
只需在Activity
中声明按钮:
public static Button btnDownload;
onCreate
中的
btnDownload = (Button) findViewById(R.id.btnDownload);
现在在Adapter
中使用此按钮参考:
ActivityName.btnDownload.setVisibility(View.VISIBLE);
现在,只需在Adapter
:
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(checkBox.isChecked()){
ActivityName.btnDownload.setVisibility(View.VISIBLE);
}
}
});
在Adapter
课程中写下以下代码:
初始化变量checkBoxCount = 0;
现在写下面的代码: -
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
checkedBoxesCount++;
else
checkedBoxesCount--;
if(checkedBoxesCount > 0 ){
EquipmentDataActivity.btnDownload.setVisibility(View.VISIBLE);
}else{
EquipmentDataActivity.btnDownload.setVisibility(View.GONE);
}
}
});
答案 1 :(得分:0)
使用具有getButton()方法的接口 在适配器构造函数中传递该接口(活动的这个)并将其保存为局部变量。 相反,btnDownload.setVisibility()执行interface.getButton()。setVisibility() 您的活动正在实施界面
答案 2 :(得分:0)
将按钮传递给recyclerview适配器是个坏主意,它可能会导致内存泄漏
更好的办法是在checkBox satte更改回调时将回调设置为recyclelerView winch并在回调中更改按钮的可见性
这里是例子:
适配器:
class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
List<String> items=new ArrayList<>();
MyCallBack callBack;
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false));
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(callBack!=null){
callBack.onCheckBoxStateChanged(b);
}
}
});
}
@Override
public int getItemCount() {
return items.size();
}
public void setCallBack(MyCallBack callBack) {
this.callBack = callBack;
}
public interface MyCallBack {
void onCheckBoxStateChanged(boolean newState);
}
}
查看持有人:
class MyViewHolder extends RecyclerView.ViewHolder {
CheckBox checkBox;
public MyViewHolder(View itemView) {
super(itemView);
checkBox=itemView.findViewById(R.id.chekcbox)
}
}
MyCallback:
public interface MyCallBack{
void onCheckBoxStateChanged(boolean newState);
}
活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
MyAdapter myAdapter=new MyAdapter();
Button button=findViewById(R.id.button);
myAdapter.setCallBack(new MyAdapter.MyCallBack() {
@Override
public void onCheckBoxStateChanged(boolean newState) {
if(newState)button.setVisibility(View.VISIBLE);
else button.setVisibility(View.GONE);
}
});
}