Android 如何在RecyclerAdapter中实现多重回调?

Android 如何在RecyclerAdapter中实现多重回调?,android,onclicklistener,android-recyclerview,Android,Onclicklistener,Android Recyclerview,我有一个定制的ServerRecyclerAdapter,我在其中实现了onlongclicklister,但现在我在哪里实现OnClickListener public class ServerRecyclerAdapter extends RecyclerView.Adapter<ServerRecyclerAdapter.ViewHolder> { //Interface for callbacks interface ActionCallback { void on

我有一个定制的
ServerRecyclerAdapter
,我在其中实现了
onlongclicklister
,但现在我在哪里实现
OnClickListener

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

//Interface for callbacks
interface ActionCallback {
    void onLongClickListener(Server server);
}

private Context context;
private List<Server> serverList;
private ActionCallback mActionCallbacks;

ServerRecyclerAdapter(Context context, List<Server> serverList) {
    this.context = context;
    this.serverList = serverList;

}

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

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.bindData(position);
}

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

void updateData(List<Server> servers) {
    this.serverList = servers;
    notifyDataSetChanged();
}

//View Holder
class ViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
    private TextView mNameTextView;


    ViewHolder(View itemView) {
        super(itemView);

        itemView.setOnLongClickListener(this);

        mNameTextView = itemView.findViewById(R.id.nameTextView);
    }

    void bindData(int position) {
        Server server = serverList.get(position);

        String servername = server.getServerName();
        mNameTextView.setText(servername);


    }

    @Override
    public boolean onLongClick(View v) {
        if (mActionCallbacks != null) {
            mActionCallbacks.onLongClickListener(serverList.get(getAdapterPosition()));
        }
        return true;
    }

}

void addActionCallback(ActionCallback actionCallbacks) {
    mActionCallbacks = actionCallbacks;
}
公共类ServerRecyclerAdapter扩展了RecyclerView.Adapter{
//回调接口
接口操作回调{
void onLongClickListener(服务器);
}
私人语境;
私有列表服务器列表;
私有操作回调mActionCallbacks;
ServerRecyclerAdapter(上下文上下文,列表服务器列表){
this.context=上下文;
this.serverList=serverList;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=LayoutFlater.from(context).充气(R.layout.item\u recycler\u server,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
持有者。绑定数据(位置);
}
@凌驾
public int getItemCount(){
返回serverList.size();
}
void updateData(列出服务器){
this.serverList=服务器;
notifyDataSetChanged();
}
//视图持有者
类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnLongClickListener{
私有文本视图mNameTextView;
ViewHolder(视图项视图){
超级(项目视图);
setOnLongClickListener(此);
mNameTextView=itemView.findviewbyd(R.id.nameTextView);
}
void bindData(int位置){
Server=serverList.get(位置);
字符串servername=server.getServerName();
mNameTextView.setText(服务器名);
}
@凌驾
仅长按公共布尔值(视图v){
if(mActionCallbacks!=null){
mActionCallbacks.onLongClickListener(serverList.get(getAdapterPosition());
}
返回true;
}
}
void addActionCallback(ActionCallback actionCallbacks){
mActionCallbacks=actionCallbacks;
}
试试这个

  ViewHolder(View itemView) {
    super(itemView);
        itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        }
    });



    itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            if (mActionCallbacks != null) {
        mActionCallbacks.onLongClickListener(serverList.get(getAdapterPosition()));
        }
            return true;
        }

    });
    }
那么

extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener

然后,它将建议您在何处插入该接口方法的覆盖。

其他人如何解决此简单问题:) 我添加了
ActionCallback

 void onClickListener(Server server);
和在
视窗夹中

class ViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener, View.OnClickListener {
private TextView mNameTextView;
ViewHolder(View itemView) {
        super(itemView);

        itemView.setOnLongClickListener(this);
        itemView.setOnClickListener(this);

        mNameTextView = itemView.findViewById(R.id.nameTextView);
    }
.
.
.
@Override
    public void onClick(View view) {
        if (mActionCallbacks != null) {
            mActionCallbacks.onClickListener(serverList.get(getAdapterPosition()));
        }
    }

谢谢@MikeM。帮我解决了这个问题。

怎么了?这和你只声明onLongClickListenerYep是的,你明白了。(对不起,我不小心删除了我的评论。)你需要为
onClick()的
ActionCallback
添加另一个方法
,但基本上是一样的。我做了一个编辑,让你能更清楚地看到@MikeM。别忘了
itemView.setOnClickListener(这个);