gpt4 book ai didi

java - 从 recyclerview 适配器调用 Activity 方法

转载 作者:行者123 更新时间:2023-12-01 17:50:36 24 4
gpt4 key购买 nike

我试图从我的回收器 View 适配器调用 Activity 方法。我做了什么,
我已经创建了一个接口(interface),在所需的 Activity 上实现覆盖其方法并尝试从适配器调用
我收到 java.lang.ClassCastException: android.app.Application 无法转换为 my.package.Interface.InterfaceName
下面是代码

MethodCaller.java

public interface MethodCaller {
void deleteAddress(String did);
}

地址适配器.java

public class AddressAdapter extends RecyclerView.Adapter<AddressAdapter.ViewHolder> {
private Context context;
private List<Address> list;

public AddressAdapter(Context context, List<Address> list) {
this.context = context;
this.list = list;
}

@NonNull
@Override
public AddressAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.address_single, parent, false);
return new AddressAdapter.ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull AddressAdapter.ViewHolder holder, final int position) {
Address address = list.get(position);

holder.btn_deleteAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Address address = list.get(position);
final String id = address.getId();

//if(context instanceof MethodCaller){
((MethodCaller)context).deleteAddress(id); //ClassCastException - Error
//}
}
});
}

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

public class ViewHolder extends RecyclerView.ViewHolder {
public Button btn_deleteAddress;

public ViewHolder(View itemView) {
super(itemView);


btn_deleteAddress = itemView.findViewById(R.id.btn_deleteAddress);
}
}
}

AddressActivity.java

public class AddressActivity extends AppCompatActivity implements MethodCaller {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_address);

//CODE
}

}

@Override
public void deleteAddress(String did) {
Toast.makeText(this, did, Toast.LENGTH_SHORT).show();

/*DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
deleteAddressRequest(id);
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
break;
}
}
};

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure you want to delete this item?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();*/
}
}

最佳答案

试试这个

public MethodCaller methodCaller;
public AddressAdapter(Context context, List<Address> list,MethodCaller methodCaller) {
this.context = context;
this.list = list;
this.methodCaller = methodCallerl;

}

@Override
public void onBindViewHolder(@NonNull AddressAdapter.ViewHolder holder, final int position) {
Address address = list.get(position);

holder.btn_deleteAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Address address = list.get(position);
final String id = address.getId();
methodCaller .deleteAddress(id);
}
});
}

AddressActivity.java

像这样在适配器中传递接口(interface);

new AddressAdapter(context,list,this);

关于java - 从 recyclerview 适配器调用 Activity 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50577956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com