MyAdapter 的点击事件和长按事件
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private List<String> list; //条目点击监听 private OnItemClickListener onItemClickListener; //长按事件 private onItemLongClickListener onItemLongClickListener; //常量 private static final int TYPE_ONE = 0; private static final int TYPE_TWO = 1; public MyAdapter(Context context, List<String> list){ this.context = context; this.list = list; } //添加一个条目 public void addItem(String str){ list.add(0,str); //刷新适配器 notifyDataSetChanged(); //notifyItemInserted();添加的时候,想要的动画,必须调用这个方法 } //删除一个条目 public void removeItem(int postion) { list.remove(postion); //notifyDataSetChanged(); notifyItemRemoved(postion); } //加载更多 public void addMore(List<String> resultList){ for (String str : resultList) { list.add(str); } //刷新适配器 notifyDataSetChanged(); } //条目点击事件 interface OnItemClickListener{ void onItemClick(View view,int position); } //条目点击事件 public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } //长按事件 interface onItemLongClickListener{ void onItemLongClick(View view,int position); } //recycleVIew长按事件 public void setOnItemLongClickListener(onItemLongClickListener onItemLongClickListener){ this.onItemLongClickListener = onItemLongClickListener; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder viewHolder = null; if(viewType == TYPE_ONE) { View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false); viewHolder = new MyViewHolder(view); }else{ View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false); viewHolder = new MyViewHolder(view); } return viewHolder; } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { //将数据绑定到控件上 holder.tvContent.setText(list.get(position)); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //条目的点击事件 int index = holder.getLayoutPosition(); onItemClickListener.onItemClick(view,index); } }); //实现recycleView的条目长按事件 holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { //条目的位置获取,应该由这个比较保险 int index = holder.getLayoutPosition(); onItemLongClickListener.onItemLongClick(view,index); return true;//让其消费掉事件 } }); } //得到多条目加载的类型 @Override public int getItemViewType(int position) { if(position %2 == 0){ return TYPE_ONE; }else{ return TYPE_TWO; } } @Override public int getItemCount() { return list != null ? list.size() : 0; } class MyViewHolder extends RecyclerView.ViewHolder{ private TextView tvContent; public MyViewHolder(View itemView) { super(itemView); tvContent = itemView.findViewById(R.id.tvContent); } } }
_______________________________
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; //假数据 private List<String> list = new ArrayList<>(); private MyAdapter adapter; private LinearLayoutManager linearLayoutManager; private int lastItemPostion; private SwipeRefreshLayout swipeRefreshLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i = 0;i < 20;++i){ list.add("我是 "+i); } //找到swipeRefreshLayout控件 swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout); recyclerView = (RecyclerView)findViewById(R.id.recyclerView); //设置布局管理器 linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(linearLayoutManager); //添加分割线 recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL)); adapter = new MyAdapter(this,list); recyclerView.setAdapter(adapter); //设置添加、删除动画 recyclerView.setItemAnimator(new DefaultItemAnimator()); //条目点击 、 长按 //Google adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { //Toast.makeText(MainActivity.this, list.get(position), Toast.LENGTH_SHORT).show(); adapter.removeItem(position); } }); //recyclerView的条目长按事件 adapter.setOnItemLongClickListener(new MyAdapter.onItemLongClickListener() { @Override public void onItemLongClick(View view, int position) { Toast.makeText(MainActivity.this, "我是长按事件" + list.get(position), Toast.LENGTH_SHORT).show(); } }); //实现RcyclerView的上拉刷新 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); switch (newState){ case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://静止状态 //加载更多 if(adapter.getItemCount() - 1 == lastItemPostion){ //滑动到了最底部 List<String> result = new ArrayList<>(); for (int i = 0;i < 10; i++){ result.add("我是新来的"+i); } //添加更多 adapter.addMore(result); Toast.makeText(MainActivity.this, "加载更多", Toast.LENGTH_SHORT).show(); } break; } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //找到第一个条目 //int firstItemPostision = linearLayoutManager.findFirstVisibleItemPosition(); lastItemPostion = linearLayoutManager.findLastVisibleItemPosition(); //System.out.println("firstItemPostion : "+firstItemPostision+"\t lastItemPosition : "+lastItemPostion); } }); //设置下拉刷新圆圈颜色变换 swipeRefreshLayout.setColorSchemeColors(Color.BLUE,Color.YELLOW,Color.RED); //实现recycerView的下拉刷新 swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "下拉了", Toast.LENGTH_SHORT).show(); //隐藏 swipeRefreshLayout.setRefreshing(false); //模拟网路加载数据 } },5000); } }); } public void btnAddItem(View view){ adapter.addItem("世界,你好!"); } }