亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

RecyclerView的基本使用

2019-11-09 14:27:07
字體:
來源:轉載
供稿:網友

一、添加gradle依賴。

二、RecyclerView實現垂直滾動的列表:

1.RecyclerView適配器:

public class BombAdapter extends RecyclerView.Adapter<BombAdapter.ViewHolder>{ PRivate List<Bomb> mList; private Context mContext; public BombAdapter (Context context,List<FruitBean> list){ mList = list; mContext = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.item,null); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Bomb bomb = mList.get(position); holder.imageView.setImageResource(bomb .imageId); holder.textView.setText(bomb .fruitName); } @Override public int getItemCount() { return mList.size(); } static class ViewHolder extends RecyclerView.ViewHolder{ ImageView imageView; TextView textView; public ViewHolder(View itemView) { super(itemView); imageView = (ImageView) itemView.findViewById(R.id.imageView); textView = (TextView) itemView.findViewById(R.id.textView); } }}

2.MainActivity代碼:

public class MainActivity extends Activity { private RecyclerView recyclerView; private List<Bomb> bombList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); } private void initData() { for (int i=0;i<2;i++){ Bomb bomb5 = new Bomb("我是bomb 1 哦",R.drawable.bomb5); bombList.add(bomb5); Bomb bomb6 = new Bomb("我是bomb 2 哦",R.drawable.bomb6); bombList.add(bomb6); Bomb bomb7 = new Bomb("我是bomb 3 哦",R.drawable.bomb7); bombList.add(bomb7); Bomb bomb8 = new Bomb("我是bomb 4 哦",R.drawable.bomb8); bombList.add(bomb8); Bomb bomb9 = new Bomb("我是bomb 5 哦",R.drawable.bomb9); bombList.add(bomb9); Bomb bomb10 = new Bomb("我是bomb 6 哦",R.drawable.bomb10); bombList.add(bomb10); Bomb bomb11 = new Bomb("我是bomb 7 哦",R.drawable.bomb11); bombList.add(bomb11); Bomb bomb12 = new Bomb("我是bomb 8 哦",R.drawable.bomb12); bombList.add(bomb12); Bomb bomb13 = new Bomb("我是bomb 9 哦",R.drawable.bomb13); bombList.add(bomb13); Bomb bomb14 = new Bomb("我是bomb 10 哦",R.drawable.bomb14); bombList.add(bomb14); Bomb bomb15 = new Bomb("我是bomb 11 哦",R.drawable.bomb15); bombList.add(bomb15); Bomb bomb16 = new Bomb("我是bomb 12 哦",R.drawable.bomb16); bombList.add(bomb16); } } private void initView() { recyclerView = (RecyclerView) findViewById(R.id.recyclerView); //設置recyclerView的布局方式為線性布局 LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); //如果可以確定每個item的高度是固定的,設置這個選項可以提高性能 recyclerView.setHasFixedSize(true); BombAdapter adapter = new BombAdapter(this,bombList); recyclerView.setAdapter(adapter); }}

運行效果: 這里寫圖片描述

發現此列表是沒有分割線的,當然加分割線是很簡單的,完全可以在Item的布局里加水平的view,這里寫個別的方法添加分割線。

先寫個分割線的類:

public class DividerLine extends RecyclerView.ItemDecoration{ /** * 水平方向 */ public static final int HORIZONTAL = LinearLayoutManager.HORIZONTAL; /** * 垂直方向 */ public static final int VERTICAL = LinearLayoutManager.VERTICAL; // 畫筆 private Paint paint; // 布局方向 private int orientation; // 分割線顏色 private int color; // 分割線尺寸 private int size; public DividerLine() { this(VERTICAL); } public DividerLine(int orientation) { this.orientation = orientation; paint = new Paint(); } @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDrawOver(c, parent, state); if (orientation == VERTICAL) { drawHorizontal(c, parent); } else { drawVertical(c, parent); } } /** * 設置分割線顏色 * * @param color 顏色 */ public void setColor(int color) { this.color = color; paint.setColor(color); } /** * 設置分割線尺寸 * * @param size 尺寸 */ public void setSize(int size) { this.size = size; } // 繪制垂直分割線 protected void drawVertical(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + size; c.drawRect(left, top, right, bottom, paint); } } // 繪制水平分割線 protected void drawHorizontal(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + size; c.drawRect(left, top, right, bottom, paint); } }}

代碼中使用此分割線的類:

private void initView() { recyclerView = (RecyclerView) findViewById(R.id.recyclerView);//設置recyclerView的布局的排列方向為縱向,默認為縱向 LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); //如果可以確定每個item的高度是固定的,設置這個選項可以提高性能 recyclerView.setHasFixedSize(true); //添加分割線 DividerLine dividerLine = new DividerLine(DividerLine.VERTICAL); dividerLine.setSize(2); dividerLine.setColor(getResources().getColor(R.color.dividerLine)); recyclerView.addItemDecoration(dividerLine); BombAdapter adapter = new BombAdapter(this,bombList); recyclerView.setAdapter(adapter); }

在運行,發現分割線出來了: 這里寫圖片描述

三、實現RecyclerView的橫向滾動的列表:

1.先將item布局改成垂直:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="60dp" android:layout_height="match_parent" android:gravity="center_horizontal"> <ImageView android:id="@+id/imageView" android:layout_width="50dp" android:layout_height="50dp" /> <TextView android:id="@+id/textView" android:layout_marginTop="5dp" android:gravity="center" android:textSize="16sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>

2.MainActivity代碼的innitVIew()方法加一句就ok:

private void initView() { recyclerView = (RecyclerView) findViewById(R.id.recyclerView); LinearLayoutManager layoutManager = new LinearLayoutManager(this); //設置recyclerView的布局的排列方向為橫向 layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); //設置recyclerView的布局方式為線性布局,默認布局的排列方向為橫向為縱向排列 recyclerView.setLayoutManager(layoutManager); BombAdapter adapter = new BombAdapter(this,bombList); recyclerView.setAdapter(adapter); }

運行: 這里寫圖片描述

四、實現RecyclerView的瀑布流布局:

1.將item布局改為:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp"> <ImageView android:id="@+id/imageView" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_horizontal"/> <TextView android:id="@+id/textView" android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left"/></LinearLayout>

2.將recyclerView的布局方式改為瀑布流布局,MainActivity代碼:

public class MainActivity extends Activity { private RecyclerView recyclerView; private List<Bomb> bombList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); } private void initData() { for (int i=0;i<2;i++){ Bomb bomb5 = new Bomb(getRandomLengthName("bomb1"),R.drawable.bomb5); bombList.add(bomb5); Bomb bomb6 = new Bomb(getRandomLengthName("bomb2"),R.drawable.bomb6); bombList.add(bomb6); Bomb bomb7 = new Bomb(getRandomLengthName("bomb3"),R.drawable.bomb7); bombList.add(bomb7); Bomb bomb8 = new Bomb(getRandomLengthName("bomb4"),R.drawable.bomb8); bombList.add(bomb8); Bomb bomb9 = new Bomb(getRandomLengthName("bomb5"),R.drawable.bomb9); bombList.add(bomb9); Bomb bomb10 = new Bomb(getRandomLengthName("bomb6"),R.drawable.bomb10); bombList.add(bomb10); Bomb bomb11 = new Bomb(getRandomLengthName("bomb7"),R.drawable.bomb11); bombList.add(bomb11); Bomb bomb12 = new Bomb(getRandomLengthName("bomb8"),R.drawable.bomb12); bombList.add(bomb12); Bomb bomb13 = new Bomb(getRandomLengthName("bomb9"),R.drawable.bomb13); bombList.add(bomb13); Bomb bomb14 = new Bomb(getRandomLengthName("bomb10"),R.drawable.bomb14); bombList.add(bomb14); Bomb bomb15 = new Bomb(getRandomLengthName("bomb11"),R.drawable.bomb15); bombList.add(bomb15); Bomb bomb16 = new Bomb(getRandomLengthName("bomb12"),R.drawable.bomb16); bombList.add(bomb16); } } private void initView() { recyclerView = (RecyclerView) findViewById(R.id.recyclerView); //第一個參數指定布局的列數為3,第二個參數指定布局排列方向 //若指定排列方向為橫向,則顯示三行的橫向瀑布流 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); BombAdapter adapter = new BombAdapter(this,bombList); recyclerView.setAdapter(adapter); } //獲得名字的隨機長度 private String getRandomLengthName(String name){ Random random = new Random(); int length = random.nextInt(20)+1; StringBuilder sb = new StringBuilder(); for (int i=0;i<length;i++){ sb.append(name); } return sb.toString(); }}

運行: 這里寫圖片描述

五、實現recyclerView的網格布局: 將 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); 改為 GridLayoutManager layoutManager = new GridLayoutManager(this,3); 即可。運行: 這里寫圖片描述

六、RecyclerView的點擊事件:

RecyclerView需要我們自己給子項具體的View去注冊點擊事件。請看修改以后的BombAdapter代碼:

public class BombAdapter extends RecyclerView.Adapter<BombAdapter.ViewHolder>{ private List<Bomb> mList; private Context mContext; public BombAdapter(Context context, List<Bomb> list){ mList = list; mContext = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.item ,null); final ViewHolder viewHolder = new ViewHolder(view); //為itemView設置點擊事件 viewHolder.bombView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //這句很重要 int position = viewHolder.getAdapterPosition(); Toast.makeText(mContext, "你點擊了itemVIew----" + mList.get(position).fruitName, Toast.LENGTH_SHORT).show(); } }); //為imageView設置點擊事件 viewHolder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //這句很重要 int position = viewHolder.getAdapterPosition(); Toast.makeText(mContext, "你點擊了imageVIew----" + mList.get(position).fruitName, Toast.LENGTH_SHORT).show(); } }); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Bomb bomb = mList.get(position); holder.imageView.setImageResource(bomb.imageId); holder.textView.setText(bomb.fruitName); } @Override public int getItemCount() { return mList.size(); } static class ViewHolder extends RecyclerView.ViewHolder{ View bombView; ImageView imageView; TextView textView; public ViewHolder(View itemView) { super(itemView); bombView = itemView; imageView = (ImageView) itemView.findViewById(R.id.imageView); textView = (TextView) itemView.findViewById(R.id.textView); } }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品欧美日韩一区二区| 青青在线视频一区二区三区| 日韩高清免费在线| 亚洲2020天天堂在线观看| 亚洲香蕉成人av网站在线观看| 欧美日韩激情视频8区| 77777亚洲午夜久久多人| 国产精选久久久久久| 久久久伊人日本| 久久久91精品国产一区不卡| 国产精品嫩草影院久久久| 欧美日韩福利在线观看| 久久久久久久91| 欧美另类老肥妇| 欧美国产第一页| 国产精品第一区| 亚洲图片欧洲图片av| 日韩毛片在线观看| 欧美精品一本久久男人的天堂| 91久久中文字幕| 精品成人在线视频| 国产aⅴ夜夜欢一区二区三区| 国产噜噜噜噜久久久久久久久| 少妇激情综合网| 欧美日韩国产在线看| 日韩av在线精品| 日韩欧美国产一区二区| 国产一区二区三区四区福利| 亚洲精品成人网| 久久精品国产一区二区三区| 粉嫩av一区二区三区免费野| 久久在线免费观看视频| 日韩理论片久久| 欧美日韩国产综合视频在线观看中文| 亚洲色图国产精品| 日韩免费电影在线观看| 国产精品中文字幕在线观看| 亚洲一区中文字幕| 国产偷国产偷亚洲清高网站| 成人情趣片在线观看免费| 成人天堂噜噜噜| 伊人精品在线观看| 欧美日韩亚洲精品一区二区三区| 国产免费一区二区三区香蕉精| 国产精品免费久久久久影院| 国产精品99久久久久久久久久久久| 日韩av在线免费观看| 中文字幕精品在线| 成人免费看黄网站| 91美女高潮出水| 成人网欧美在线视频| 精品国偷自产在线视频| 美乳少妇欧美精品| 精品久久久久久久久久| 欧美高清视频一区二区| 久久久久久久久久av| 日韩精品极品在线观看| 国产美女精品视频免费观看| 国产精品av在线| 欧美有码在线视频| 欧美激情免费在线| 97香蕉久久超级碰碰高清版| 亚洲精品在线视频| 亚洲精品小视频在线观看| 不用播放器成人网| 亚洲乱码国产乱码精品精| 久久99青青精品免费观看| 国产精品福利久久久| 在线精品视频视频中文字幕| 亚洲欧美中文日韩v在线观看| 国产亚洲精品va在线观看| 久久精品一偷一偷国产| 亚洲欧美综合另类中字| 这里只有视频精品| 国产精品美女呻吟| 国产精品视频播放| 国产日产欧美a一级在线| 成人h视频在线| 亚洲成人久久网| 国产成人亚洲综合91精品| 欧美—级高清免费播放| 亚洲一区二区日本| 成人综合网网址| 91美女片黄在线观| 欧美激情免费看| 国内精品伊人久久| 亚洲天堂一区二区三区| 欧美理论电影在线播放| 一色桃子一区二区| 日本亚洲欧美三级| 日本精品久久中文字幕佐佐木| 国产精品爽黄69天堂a| 久久国产加勒比精品无码| 国产精品亚洲精品| 国产精品久久中文| 在线视频日本亚洲性| 中文字幕在线成人| 久久影视电视剧免费网站清宫辞电视| 欧美激情免费看| 亚洲爱爱爱爱爱| 欧美极品xxxx| 亚洲精品v天堂中文字幕| 中文字幕日韩专区| 91精品啪aⅴ在线观看国产| 亚洲国产美女精品久久久久∴| 亚洲wwwav| 日韩在线资源网| 欧美国产在线视频| 日本久久久久久久久| 亚洲欧美一区二区三区在线| 亚洲黄色www| 欧美亚洲激情在线| 日韩久久免费视频| 成人精品福利视频| 奇米影视亚洲狠狠色| 午夜免费久久久久| 91老司机在线| 亚洲精品一区二区三区婷婷月| 国产精品久久久久久久久久东京| 亚洲的天堂在线中文字幕| 欧美黄色成人网| 蜜臀久久99精品久久久无需会员| 欧美激情久久久| 青青草精品毛片| 日韩久久精品电影| 国产欧美精品日韩精品| 亚洲最新中文字幕| 中文字幕日韩在线播放| 欧美激情视频在线观看| 日韩激情在线视频| 久久久久久久久久av| 精品福利在线视频| 久久久久久久久国产精品| 欧美中文字幕视频| 欧美体内谢she精2性欧美| 亚洲黄色www网站| 国产网站欧美日韩免费精品在线观看| 亚洲成人av中文字幕| 久久久久久久网站| 亚洲激情在线观看视频免费| 精品亚洲一区二区三区在线播放| 久久久av电影| 成人福利视频网| 日韩大陆欧美高清视频区| 国产精品黄视频| 国产精品无av码在线观看| 欧美综合国产精品久久丁香| 久久精品一区中文字幕| 欧洲一区二区视频| 日本欧美一二三区| 亚洲大胆人体视频| 久久亚洲欧美日韩精品专区| 欧美视频专区一二在线观看| 国外日韩电影在线观看| 国产成人精品一区二区在线| 视频一区视频二区国产精品| 国产亚洲精品久久久久动| 欧美国产日产韩国视频| 久久噜噜噜精品国产亚洲综合| 国a精品视频大全| 国产精品6699| 日本成人精品在线| 欧美日韩一区二区免费视频| 国产成人自拍视频在线观看|