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(这个);
。