Android-RecyclerView(解析二)
来源:互联网 发布:简单网络协议实现 编辑:程序博客网 时间:2024/05/22 00:20
添加点击事件,以及layoutManager的使用
1、适配器的编写
package com.example.recyclerview;import java.util.List;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.TextView;public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements View.OnClickListener{ private Context context; private List<String>list; //4.1 创建接口对象 private OnChildClickListener listnener; private RecyclerView recvclerView; //4.2 添加set监听方法,以防止与系统重名,修改方法名setOnChildListnener public void setOnChildClickListnener(OnChildClickListener listnener) { this.listnener = listnener; } /** * 3、MyAdapter的构造方法添加构造方法 */ public MyAdapter(Context context, List<String> list) { this.context = context; this.list = list; } /** * 1、编写viewHolder:注意再listView当中我们编写的viewHolder是我们自定义的,但是再RecyclerView * 中viewholder被规范化了,它需要继承自RecyclerView的viewHolder,写好自己的ViewHolder */ public static class MyViewHolder extends RecyclerView.ViewHolder{ private TextView text; /** * 2、编写viewHolder的构造方法 */ public MyViewHolder(View itemView) { super(itemView); //2.1找到item中的text text=(TextView) itemView.findViewById(R.id.item_text); } } /** * 3、实现它的三个抽象方法 */ /** * 返回这个adpter中一共有多少条数据 */ @Override public int getItemCount() { // TODO Auto-generated method stub return list.size(); } /** * 把现在的数据绑定到原有的viewHolder上 */ @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.text.setText(list.get(position)); } /** * 相当于在listview中,onCreatView为空时,需要去创建viewHolder */ @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=LayoutInflater.from(context).inflate(R.layout.item, parent,false); //7、由adapter去实现里面的抽象方法 view.setOnClickListener(this); return new MyViewHolder(view); } //8、抽象方法 @Override public void onClick(View v) { //8.1为了安全起见我们首先进行判断RecyclerView不能为空并且接口对象(listener)不等于空,点击事件才有用 //8.2在点击时我们要获得这个position if(recvclerView!=null&&listnener!=null){ int position=recvclerView.getChildAdapterPosition(v); listnener.onChildClick(recvclerView, v, position, list.get(position)); } } /** * 4、添加点击事件接口(与listview不同) */ public interface OnChildClickListener{ void onChildClick(RecyclerView parent,View view,int position,/*数据模型对象*/String data); } /** * 5、连接到RecyclerView,为RecyclerView绑定数据时执行的方法 */ @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { // TODO Auto-generated method stub super.onAttachedToRecyclerView(recyclerView); this.recvclerView=recyclerView; } /** * 6、与上面方法想对应,解绑的时候执行的方法 */ @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { // TODO Auto-generated method stub super.onDetachedFromRecyclerView(recyclerView); this.recvclerView=null; }}
在MainActivity中调用adapter的点击事件运行
package com.example.recyclerview;import java.util.ArrayList;import java.util.List;import java.util.Locale;import android.os.Bundle;import android.app.Activity;import android.support.v7.widget.RecyclerView;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity implements MyAdapter.OnChildClickListener { private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler); //添加100条假数据 List<String> list=new ArrayList<String>(); for(int i=0;i<100;i++){ list.add(String.format(Locale.CHINA, "第%03d条数据",i)); } adapter=new MyAdapter(this, list); recycler.setAdapter(adapter); adapter.setOnChildClickListnener(this); } /** * 点击事件 */ @Override public void onChildClick(RecyclerView parent, View view, int position, String data) { //将点击的内容数据打印出来 Toast.makeText(this, data, Toast.LENGTH_SHORT).show(); }}
在adapter中添加增加和删除数据的方法:
package com.example.recyclerview;import java.util.List;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.TextView;public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements View.OnClickListener{ private Context context; private List<String>list; //4.1 创建接口对象 private OnChildClickListener listnener; private RecyclerView recvclerView; //4.2 添加set监听方法,以防止与系统重名,修改方法名setOnChildListnener public void setOnChildClickListnener(OnChildClickListener listnener) { this.listnener = listnener; } /** * 3、MyAdapter的构造方法添加构造方法 */ public MyAdapter(Context context, List<String> list) { this.context = context; this.list = list; } /** * 1、编写viewHolder:注意再listView当中我们编写的viewHolder是我们自定义的,但是再RecyclerView * 中viewholder被规范化了,它需要继承自RecyclerView的viewHolder,写好自己的ViewHolder */ public static class MyViewHolder extends RecyclerView.ViewHolder{ private TextView text; /** * 2、编写viewHolder的构造方法 */ public MyViewHolder(View itemView) { super(itemView); //2.1找到item中的text text=(TextView) itemView.findViewById(R.id.item_text); } } /** * 3、实现它的三个抽象方法 */ /** * 返回这个adpter中一共有多少条数据 */ @Override public int getItemCount() { // TODO Auto-generated method stub return list.size(); } /** * 把现在的数据绑定到原有的viewHolder上 */ @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.text.setText(list.get(position)); } /** * 相当于在listview中,onCreatView为空时,需要去创建viewHolder */ @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=LayoutInflater.from(context).inflate(R.layout.item, parent,false); //7、由adapter去实现里面的抽象方法 view.setOnClickListener(this); return new MyViewHolder(view); } //8、抽象方法 @Override public void onClick(View v) { //8.1为了安全起见我们首先进行判断RecyclerView不能为空并且接口对象(listener)不等于空,点击事件才有用 //8.2在点击时我们要获得这个position if(recvclerView!=null&&listnener!=null){ int position=recvclerView.getChildAdapterPosition(v); listnener.onChildClick(recvclerView, v, position, list.get(position)); } } /** * 9、添加删除的方法,从指定位置删除 */ public void remove(int position){ list.remove(position); /** * 9.1 删除后提醒刷新 * 注意: 调用notifyDataSetChanged();将无删除特殊动画效果 */ notifyItemRemoved(position); } /** * 4、添加点击事件接口(与listview不同) */ public interface OnChildClickListener{ void onChildClick(RecyclerView parent,View view,int position,/*数据模型对象*/String data); } /** * 5、连接到RecyclerView,为RecyclerView绑定数据时执行的方法 */ @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { // TODO Auto-generated method stub super.onAttachedToRecyclerView(recyclerView); this.recvclerView=recyclerView; } /** * 6、与上面方法想对应,解绑的时候执行的方法 */ @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { // TODO Auto-generated method stub super.onDetachedFromRecyclerView(recyclerView); this.recvclerView=null; }}
MainActivity调用执行:
package com.example.recyclerview;import java.util.ArrayList;import java.util.List;import java.util.Locale;import android.os.Bundle;import android.app.Activity;import android.support.v7.widget.RecyclerView;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity implements MyAdapter.OnChildClickListener { private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler); //添加100条假数据 List<String> list=new ArrayList<String>(); for(int i=0;i<100;i++){ list.add(String.format(Locale.CHINA, "第%03d条数据",i)); } adapter=new MyAdapter(this, list); recycler.setAdapter(adapter); adapter.setOnChildClickListnener(this); } /** * 点击事件 */ @Override public void onChildClick(RecyclerView parent, View view, int position, String data) { //将点击的内容数据打印出来 Toast.makeText(this, data, Toast.LENGTH_SHORT).show(); //调用删除item方法 adapter.remove(position); }}
layoutManager的使用:
package com.example.recyclerview;import java.util.ArrayList;import java.util.List;import java.util.Locale;import android.os.Bundle;import android.app.Activity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity implements MyAdapter.OnChildClickListener { private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler); //添加100条假数据 List<String> list=new ArrayList<String>(); for(int i=0;i<100;i++){ list.add(String.format(Locale.CHINA, "第%03d条数据",i)); } adapter=new MyAdapter(this, list); /** * 在java代码中使用LinearLayoutManager,不在布局文件中使用 */ LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);//(垂直水平,是否翻转呈现布局) GridLayoutManager gridLayoutManager=new GridLayoutManager(this, 3);//(列数) //GridLayoutManager可以设置摸个item的样式 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) {//占多少列 if(position==0){ return 3; //第一行占三列 } return 1;//默认占一列 } }); recycler.setLayoutManager(gridLayoutManager);//在xml布局中可以删掉对linearLayoutManager的引用 recycler.setAdapter(adapter); adapter.setOnChildClickListnener(this); } /** * 点击事件 */ @Override public void onChildClick(RecyclerView parent, View view, int position, String data) { //将点击的内容数据打印出来 Toast.makeText(this, data, Toast.LENGTH_SHORT).show(); //调用删除item方法 adapter.remove(position); }}
0 0
- Android-RecyclerView(解析二)
- Android-RecyclerView(解析二)
- RecyclerView 解析(二)
- android RecyclerView 使用完全解析 介绍(二)
- Android RecyclerView 梦幻般的控件 使用解析(二)
- Android RecyclerView 使用解析
- android RecyclerView 完全解析
- Android RecyclerView完全解析
- Android RecyclerView 使用解析
- Android RecyclerView 完全解析
- Android RecyclerView完全解析
- Android RecyclerView完全解析
- android Recyclerview使用解析!
- Android开发技术研究--RecyclerView使用完全解析(二)(用RecyclerView代替ListView)
- 【Android】RecyclerView详解(二)
- Android RecyclerView 使用完全解析
- android RecyclerView 使用完全解析
- Android RecyclerView 使用完全解析
- 玩转Dragonboard 410c USB摄像头——保存图像
- jQuery即点即该
- [streamingpro]开发环境搭建
- display: inline-block的妙用
- Android 5.0 Toolbar 的学习使用
- Android-RecyclerView(解析二)
- PAT 1067. Sort with Swap(0,*)
- Android小坑集锦
- 设计模式之简单工厂模式
- C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
- Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_WKWebView", referenced from: objc-
- 关于事务(Transaction)的几个概念
- ReactNative 中 ListView实现GridView效果
- 使用pyton写2048游戏