国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

RecyclerView的基本使用

2019-11-09 15:35:46
字體:
供稿:網(wǎng)友

一、添加gradle依賴。

二、RecyclerView實(shí)現(xiàn)垂直滾動(dòng)的列表:

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); //設(shè)置recyclerView的布局方式為線性布局 LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); //如果可以確定每個(gè)item的高度是固定的,設(shè)置這個(gè)選項(xiàng)可以提高性能 recyclerView.setHasFixedSize(true); BombAdapter adapter = new BombAdapter(this,bombList); recyclerView.setAdapter(adapter); }}

運(yùn)行效果: 這里寫圖片描述

發(fā)現(xiàn)此列表是沒有分割線的,當(dāng)然加分割線是很簡單的,完全可以在Item的布局里加水平的view,這里寫個(gè)別的方法添加分割線。

先寫個(gè)分割線的類:

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); } } /** * 設(shè)置分割線顏色 * * @param color 顏色 */ public void setColor(int color) { this.color = color; paint.setColor(color); } /** * 設(shè)置分割線尺寸 * * @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);//設(shè)置recyclerView的布局的排列方向?yàn)榭v向,默認(rèn)為縱向 LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); //如果可以確定每個(gè)item的高度是固定的,設(shè)置這個(gè)選項(xiàng)可以提高性能 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); }

在運(yùn)行,發(fā)現(xiàn)分割線出來了: 這里寫圖片描述

三、實(shí)現(xiàn)RecyclerView的橫向滾動(dòng)的列表:

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); //設(shè)置recyclerView的布局的排列方向?yàn)闄M向 layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); //設(shè)置recyclerView的布局方式為線性布局,默認(rèn)布局的排列方向?yàn)闄M向?yàn)榭v向排列 recyclerView.setLayoutManager(layoutManager); BombAdapter adapter = new BombAdapter(this,bombList); recyclerView.setAdapter(adapter); }

運(yùn)行: 這里寫圖片描述

四、實(shí)現(xiàn)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); //第一個(gè)參數(shù)指定布局的列數(shù)為3,第二個(gè)參數(shù)指定布局排列方向 //若指定排列方向?yàn)闄M向,則顯示三行的橫向瀑布流 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); BombAdapter adapter = new BombAdapter(this,bombList); recyclerView.setAdapter(adapter); } //獲得名字的隨機(jī)長度 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(); }}

運(yùn)行: 這里寫圖片描述

五、實(shí)現(xiàn)recyclerView的網(wǎng)格布局: 將 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); 改為 GridLayoutManager layoutManager = new GridLayoutManager(this,3); 即可。運(yùn)行: 這里寫圖片描述

六、RecyclerView的點(diǎn)擊事件:

RecyclerView需要我們自己給子項(xiàng)具體的View去注冊(cè)點(diǎn)擊事件。請(qǐng)看修改以后的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設(shè)置點(diǎn)擊事件 viewHolder.bombView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //這句很重要 int position = viewHolder.getAdapterPosition(); Toast.makeText(mContext, "你點(diǎn)擊了itemVIew----" + mList.get(position).fruitName, Toast.LENGTH_SHORT).show(); } }); //為imageView設(shè)置點(diǎn)擊事件 viewHolder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //這句很重要 int position = viewHolder.getAdapterPosition(); Toast.makeText(mContext, "你點(diǎn)擊了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); } }}
上一篇:TabLayout簡單使用

下一篇:自定義吐司:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南开区| 黄平县| 南溪县| 醴陵市| 宾阳县| 龙泉市| 涟源市| 宜兰县| 霞浦县| 营口市| 铜山县| 宁波市| 平安县| 军事| 海兴县| 民和| 许昌市| 长春市| 庆阳市| 罗山县| 岗巴县| 阿城市| 荣昌县| 昆山市| 磐安县| 长海县| 徐汇区| 林甸县| 女性| 拜城县| 平昌县| 松溪县| 含山县| 黎城县| 扶绥县| 札达县| 吉首市| 海盐县| 临澧县| 吉首市| 庆元县|