1.可以实现ListView所有功能并对其进行了扩展
2.用法:在app/build.gradle的dependencies闭包中添加
compile 'com.android.support:recyclerview-v7:26.+'
在布局文件中添加//需添加完整路径
<android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" />
添加适配器:
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { private List<Fruit> mFruitList; public FruitAdapter(List<Fruit> fruitList) {//将展示的数据赋予mFruitList mFruitList = fruitList; } public class ViewHolder extends RecyclerView.ViewHolder { ImageView fruitImage; TextView fruitName; View fruitView; public ViewHolder(View view) {//view为Recycler子项的外层布局 super(view); fruitView = view; fruitImage = (ImageView) view.findViewById(R.id.fruit_image); fruitName = (TextView) view.findViewById(R.id.fruit_name); } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){//创建ViewHolder实例 View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.fruit_item,parent,false); final ViewHolder holder = new ViewHolder(view);//view表示子项 holder.fruitView.setOnClickListener(new View.OnClickListener() {//设置子项点击事件 @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(),"you clicked view" + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); holder.fruitImage.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(),"you clicked image" + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); //ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder holder,int position){//对子项数据进行赋值 Fruit fruit = mFruitList.get(position); holder.fruitImage.setImageResource(fruit.getImageId()); holder.fruitName.setText(fruit.getName()); } @Override public int getItemCount(){//返回子项数量 return mFruitList.size(); } }
在.java中添加
public class MainActivity extends AppCompatActivity { private List<Fruit> fruitList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruit(); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); /*LinearLayoutManager layoutManager = new LinearLayoutManager(this);//指定布局方式--默认为纵向滚动 layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);*///横向滚动 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,//瀑布流布局 StaggeredGridLayoutManager.VERTICAL);//3表示分为3列,第二个参数表示然让布局纵向排列 recyclerView.setLayoutManager(layoutManager); FruitAdapter adapter = new FruitAdapter(fruitList); recyclerView.setAdapter(adapter); } private void initFruit() {//初始化数据 for (int i = 0;i < 30;i++){ Fruit apple = new Fruit(getRandomLengthName("Apple"),R.drawable.bg); fruitList.add(apple); Fruit banana = new Fruit(getRandomLengthName("Banana"),R.drawable.bg); fruitList.add(banana); } } private String getRandomLengthName(String name) {//为不同子项添加不同长度名称,方便体现效果 Random random = new Random(); int lenth = random.nextInt(20) + 1; StringBuilder builder = new StringBuilder(); for(int i = 0;i < lenth;i++){ builder.append(name); } return builder.toString(); } }