错误:不兼容的类型:<匿名回调<列表<UserDataResponse>>>无法转换为 OnNoteListener



这段代码有什么问题?我使用了Activity并将其传递给碎片

RecyclerView OnClickListener是我在这个编码方法中使用的一个。

我只想点击回收窗口,把我送到另一个页面

请现在帮我:(

这是我的用户适配器

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersViewHolder> {
private Context mCtx;
private ArrayList<UserDataResponse> userDataResponseList = new ArrayList<>();
private OnNoteListener mOnNoteListener;

public UsersAdapter(Context mCtx, ArrayList<UserDataResponse> userDataResponseList, OnNoteListener 
onNoteListener) {
this.mCtx = mCtx;
this.userDataResponseList = userDataResponseList;
this.mOnNoteListener = onNoteListener;
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mCtx).inflate(R.layout.recycle_view, parent, false);
return new UsersAdapter.UsersViewHolder(view, mOnNoteListener);
}
@Override
public void onBindViewHolder(@NonNull UsersAdapter.UsersViewHolder holder, int position) {
holder.textViewName.setText("Username: " + userDataResponseList.get(position).getRTMusername());
holder.textViewEmail.setText("Firstname: " + userDataResponseList.get(position).getRTMfirstname());
holder.textViewLastname.setText("Lastname: " + userDataResponseList.get(position).getRTMlastname());
holder.textViewDepartment.setText("Department: " + userDataResponseList.get(position).getRTMdepartment());


}
@Override
public int getItemCount() {
return userDataResponseList.size();
}
class UsersViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textViewName,textViewEmail,textViewLastname,textViewDepartment;
OnNoteListener onNoteListener;
public UsersViewHolder(@NonNull View itemView, OnNoteListener onNoteListener) {
super(itemView);
textViewName = itemView.findViewById(R.id.textViewName);
textViewEmail = itemView.findViewById(R.id.textViewEmail);
textViewLastname = itemView.findViewById(R.id.textViewLastname);
textViewDepartment = itemView.findViewById(R.id.textViewDepartment);
this.onNoteListener = onNoteListener;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
onNoteListener.onNoteClick(getAdapterPosition());
}
}
public interface OnNoteListener{
void onNoteClick(int postion);
}
}

这是我的AdminUser.java

public class AdminUserFragment extends Fragment implements UsersAdapter.OnNoteListener {
private RecyclerView recyclerView;
private UsersAdapter adapter;
Api api;
ArrayList<String> Userdata;
ArrayList<UserDataResponse> userDataResponseArrayList = new ArrayList<>();
Redirectinglog redirectinglog;
private Handler refresherHandler = new Handler();
public AdminUserFragment() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_adminuser,container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Userdata = new ArrayList<>();
redirectinglog = new Redirectinglog(getActivity());
api = RetrofitClientInstance.GetResultAPI().create(Api.class);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
/////////////////////////////////////////////////////
refreshRunnable.run();



}
private  void responseuserdata(){
Call<List<UserDataResponse>> usercall = api.getUsers();
usercall.enqueue(new Callback<List<UserDataResponse>>() {
@Override
public void onResponse(Call<List<UserDataResponse>> call, Response<List<UserDataResponse>> response) {
userDataResponseArrayList = new ArrayList<>(response.body());
for(UserDataResponse UserDataResponsetest :  userDataResponseArrayList){
adapter = new UsersAdapter(getActivity(), userDataResponseArrayList, this);
recyclerView.setAdapter(adapter);
}
}
@Override
public void onFailure(Call<List<UserDataResponse>> call, Throwable t) {
Toast.makeText(getActivity(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
private Runnable refreshRunnable = new Runnable() {
@Override
public void run() {
responseuserdata();
refresherHandler.postDelayed(this, 10000);
}
};

@Override
public void onNoteClick(int postion) {
}
}

我应该用什么?请帮帮我huhuh

adapter = new UsersAdapter(getActivity(), userDataResponseArrayList, this);

在这里,您传递的是一个匿名类,而不是一个类实现onNoteListener接口的对象。这就是为什么,存在兼容性问题"这对应于一个匿名类,因为您是从一个作为Usercall.enqe.参数传递的匿名类中调用它

我给你的建议是,与其制造所有这些混乱,你可以简单地在onbindViewHolder中设置一个标签,其中包含正在传递的位置,每当用户点击回收器视图时,你可以在onClick方法上检查它,如果你只需将一个Onclicklistener连接到回收器视图,你就会使用该方法。您可以从有问题的行中检索标记值,并找出单击的位置。简单易用。如果你在我所说的内容中有任何问题,我也会写代码示例。希望我的答案有帮助,如果有帮助,请标记为已接受。干杯

在UserViewHolderClass中创建一个视图作为成员变量,并在这个";ViewHolderClass;写入this.view=view,为其分配行值。

//inside onBindViewholder class, write
MyViewHolder.view.setTag("position")
MyHolder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = view.getTag("position")// this will give you 
//the position of the row which will be tapped
}
});

此外,如果你要创建一个成员值视图,你不需要在文本视图中保留另一个成员变量,在onCreateViewHolder中,你可以简单地执行view.findviewid("textview的pass id,image view,你想查找的行中的任何内容"(,并在行中获得适当的小部件作为元素。这是因为这个视图将拥有您在行的xml文件中使用过的所有文本视图、图像视图。

最新更新