您的位置:首页 > 其它

RecyclerView条目的点击事件,接口回调

2017-12-18 14:41 435 查看
第一个,MyOnItemClickListener.java,响应 RecyclerView item的点击事件:
import android.view.View;
/**
* item点击接口
*/
public interface MyOnItemClickListener {
void OnItemClickListener(View view, int position);
}
第二个,MyOnItemLongClickListener.java,响应 RecyclerView item的长按事件:
import android.view.View;
/**
* item长按接口
*/
public interface MyOnItemLongClickListener {
void OnItemLongClickListener(View view, int position);
}
然后在MyRecyclerViewAdapter里面声明这两个接口,定义两个方法,用来让adapter在Activity里面回调,并在onBindViewHolder中给item设置监听:
定义的方法:
    /*** 列表点击事件** @param itemClickListener*/public void setOnItemClickListener(MyOnItemClickListener itemClickListener) {this.itemClickListener = itemClickListener;}/*** 列表长按事件** @param itemLongClickListener*/public void setOnItemLongClickListener(MyOnItemLongClickListener itemLongClickListener) {this.itemLongClickListener = itemLongClickListener;}
onBindViewHolder中:
/*自定义item的点击事件不为null,设置监听事件*/if (itemClickListener != null) {myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());}});}/*自定义item的长按事件不为null,设置监听事件*/if (itemLongClickListener != null) {myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View view) {itemLongClickListener.OnItemLongClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());return true;}});}
最后在Activity里面调用setOnItemClickListener和setOnItemLongClickListener就可以了。下面看完整代码: MyRecyclerViewAdapter.java
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/*** Created by jia on 2015/10/16.*/class MyRecyclerViewAdapter extends RecyclerView.Adapter {private Context context;private List<String> list;private MyOnItemClickListener itemClickListener;private MyOnItemLongClickListener itemLongClickListener;public MyRecyclerViewAdapter(Context context, List<String> list) {this.context = context;this.list = list;}/*** onCreateViewHolder中负责为Item创建视图** @param viewGroup* @param i* @return*/@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {/*初始化填充RecyclerView的item*/View viewItem = LayoutInflater.from(context).inflate(R.layout.list_item, viewGroup, false);/*返回自定义的ViewHolder*/MyViewHolder myViewHolder = new MyViewHolder(viewItem);return myViewHolder;}/*** onBindViewHolder负责将数据绑定到Item的视图上。** @param viewHolder* @param position*/@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {/*将接收到的ViewHolder强转成自定义的VIewHolder*/final MyViewHolder myViewHolder = (MyViewHolder) viewHolder;/*为Item设置数据*/myViewHolder.getIdView().setText(list.get(position));myViewHolder.getNameView().setText("name");/*自定义item的点击事件不为null,设置监听事件*/if (itemClickListener != null) {myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());}});}/*自定义item的长按事件不为null,设置监听事件*/if (itemLongClickListener != null) {myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View view) {itemLongClickListener.OnItemLongClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());return true;}});}}/*** 本方法决定了绘制item的数量** @return*/@Overridepublic int getItemCount() {return list.size();}/*** 列表点击事件** @param itemClickListener*/public void setOnItemClickListener(MyOnItemClickListener itemClickListener) {this.itemClickListener = itemClickListener;}/*** 列表长按事件** @param itemLongClickListener*/public void setOnItemLongClickListener(MyOnItemLongClickListener itemLongClickListener) {this.itemLongClickListener = itemLongClickListener;}class MyViewHolder extends RecyclerView.ViewHolder {private TextView idView;private TextView nameView;public MyViewHolder(View itemView) {super(itemView);idView = (TextView) itemView.findViewById(R.id.id);nameView = (TextView) itemView.findViewById(R.id.name);}public TextView getIdView() {return idView;}public TextView getNameView() {return nameView;}}}
MainActivity.java
import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends ActionBarActivity {private RecyclerView recyclerView;private MyRecyclerViewAdapter adapter;private List<String> list;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView = (RecyclerView) findViewById(R.id.recyclerView);initData();/** 初始化一个布局管理器,这里是默认的竖直线性,效果如上图所示* 其实完整写法为:* LinearLayoutManager manager = new LinearLayoutManager(context, orientation, reverseLayout);* 其中三个参数分别表示:* 1.context:上下文* 2.orientation:布局方向;*      LinearLayoutManager.VERTICAL:竖直方向(默认)*      LinearLayoutManager.HORIZONTAL:水平方向* 3.reverseLayout:布局数据是否反向;false:正常(默认);true:反向;* 下边的写法就相当于:new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);*/LinearLayoutManager manager = new LinearLayoutManager(this);recyclerView.setLayoutManager(manager);adapter = new MyRecyclerViewAdapter(MainActivity.this, list);recyclerView.setAdapter(adapter);/*点击事件*/adapter.setOnItemClickListener(new MyOnItemClickListener() {@Overridepublic void OnItemClickListener(View view, int position) {Toast.makeText(getApplicationContext(), "position" + position + "被点击", Toast.LENGTH_SHORT).show();}});/*长按事件*/adapter.setOnItemLongClickListener(new MyOnItemLongClickListener() {@Overridepublic void OnItemLongClickListener(View view, int position) {/*长按删除*/list.remove(position);adapter.notifyItemRemoved(position);}});}/*** 初始化集合,添加数据*/private void initData() {list = new ArrayList<>();for (int i = 0; i < 100; i++) {list.add("id:" + i);}}}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
简洁版1.定义一个接口publicinterfaceMyOnItemClickListener {   void OnItemClickListener(View view,int position);}2.适配器中添加:privateMyOnItemClickListeneritemClickListener;public voidsetOnItemClickListener(MyOnItemClickListener itemClickListener) {   this.itemClickListener= itemClickListener;}3.适配器onBindViewHolder中添加:if(itemClickListener!=null) {    holder.itemView.setOnClickListener(newView.OnClickListener() {       @Override       public voidonClick(View view) {           itemClickListener.OnItemClickListener(holder.itemView,holder.getLayoutPosition());        }    });}HomeAdapter2.this.setOnItemClickListener(newMyOnItemClickListener() {   @Override   public voidOnItemClickListener(View view,intposition) {        Toast.makeText(context,"er",Toast.LENGTH_LONG).show();    }});
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐