RecyclerView的基本用法
来源:互联网 发布:服务器地址、远程端口 编辑:程序博客网 时间:2024/05/21 17:37
以下内容来自《第一行代码Android》的学习笔记
由于RecyclerView是后来增加的控件,因此需要在build.gradle中引用其对象。
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.0' compile 'com.android.support:recyclerview-v7:25.3.0' testCompile 'junit:junit:4.12'注意com.android.support:recyclerview-v7:25.3.0一定要与上面的对应.低于 该版本会提示不是最新版本而报错,高于则会报合并错误。
然后定义一个自定义的Item control group 是布局的xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/fruit_img" android:layout_width="100dp" android:layout_height="100dp"/> <TextView android:id="@+id/fruit_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>接下来需要自定义一个填充器。并且注意在填充器中声明了一个静态类。这个ViewHolder处理自定义的数据。
package Adapter;import android.support.annotation.NonNull;import android.support.v7.widget.RecyclerView;import android.view.*;import android.widget.*;import com.example.uiwidgettest.R;import java.util.*;import model.Fruit;/** * Created by dypeng on 2017/4/16. */public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { List<Fruit> fruitData ; /** * 构造函数如何使用............................... * @param data */ public FruitAdapter(List<Fruit> data){ fruitData=data; } /** * 第二步:在生成超类ViewHolder的时候,引用指定的布局,并生成自定义的ViewHolder * @param parent * @param viewType * @return */ @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false); ViewHolder vh = new ViewHolder(view); return vh; } /** * 第三步:当绑定ViewHolder数据的时候,设置自定义ViewHolder的属性值. * @param holder * @param position */ @Override public void onBindViewHolder(ViewHolder holder, int position) { Fruit fruit = fruitData.get(position); holder.Img.setImageResource(fruit.getImgid()); holder.fruitName.setText(fruit.getFruitName()); } @Override public int getItemCount() { return fruitData.size(); } /** * 第一步:重新定义一个静态的ViewHolder类,目的是将自定义的控件包括进去,为绑定其数据作准备 * */ static class ViewHolder extends RecyclerView.ViewHolder{ private ImageView Img; private TextView fruitName; public ViewHolder(View itemView) { super(itemView); Img=(ImageView)itemView.findViewById(R.id.fruit_img); fruitName=(TextView)itemView.findViewById(R.id.fruit_txt); } }}
再定义一个活动的布局。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"><android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recyclerView"/></LinearLayout>
然后在活动中就可以引用了。
package com.example.uiwidgettest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import java.util.*;public class ListActivity extends BaseActivity { List<model.Fruit> FruitList=new ArrayList<model.Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); InitialFruit(); Adapter.FruitAdapter adapter=new Adapter.FruitAdapter(FruitList); RecyclerView rview=(RecyclerView)findViewById(R.id.recyclerView); LinearLayoutManager layoutManager = new LinearLayoutManager(this); //layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);横向布局去掉该注释。并且需要在布局文件中作相应的设置。需要把item_layout(细项中的布局)android:orientation="horizontal"换成 android:orientation="vertical" rview.setLayoutManager(layoutManager); rview.setAdapter(adapter); } private void InitialFruit(){ for (int i=0;i<30;i++){ model.Fruit f1=new model.Fruit(R.drawable.apple,"苹果"); model.Fruit f2=new model.Fruit(R.drawable.orange,"橙"); model.Fruit f3=new model.Fruit(R.drawable.pear,"梨"); FruitList.add(f1); FruitList.add(f2); FruitList.add(f3); } }}
如果需要定义单击事件,是直接在Item的控件中订单事件侦听的。如以下定义一个图片的单击事件。
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false); final ViewHolder vh = new ViewHolder(view); vh.Img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position=vh.getAdapterPosition(); Fruit f=fruitData.get(position); Toast.makeText(v.getContext(),f.getFruitName(),Toast.LENGTH_LONG).show(); } }); return vh; }
0 0
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- recyclerview的基本用法(一)
- Android RecyclerView的基本用法
- RecyclerView的基本用法 (一)
- RecyclerView的基本用法 (二)
- RecyclerView的基本用法 (三)
- RecyclerView的基本用法 (四)
- RecyclerView的基本用法 (五)
- Javascript面向对象(四)——函数原型
- 如何去除使用inline-block之后的间距(一)?
- 使用Dom4j 解析XML
- 【java】事件监听——通过点击不同的按钮,让面板的背景色发生相应的变化
- 2017/4/14-4/15
- RecyclerView的基本用法
- UVALive
- 工厂模式
- AsyncTask之加载图片
- python-框架-网页爬虫-文本处理-科学计算-可视化-机器学习-数据挖掘-深度学习
- 常用网站
- java 锁与可重入锁
- ELK框架搭建
- 【数据库系统概念部分习题】第二章 关系模型介绍