安卓学习-(滚动布局:RecyclerView)

9、RecyclerView
由于RecyclerView属于新增控件,所以
在app/build.gradle中添加如下代码:
dependencies {
compile fileTree(dir: 'libs' , include: [ '*.jar' ])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:recyclerview-v7:24.2.1'
}

MainActivity.xml
<? xml version= "1.0" encoding= "utf-8" ?>
< LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android"
android :layout_width= "match_parent"
android :layout_height= "match_parent" >

< android.support.v7.widget.RecyclerView
android :id= "@+id/recycler_view"
android :layout_width= "match_parent"
android :layout_height= "match_parent" />

</ LinearLayout >

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


MainActivity.java
package com.example.recyclerviewtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

private List<Fruit> fruitList = new ArrayList<Fruit>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
initFruits();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id. recycler_view );
//这里的3 表示 3行或者3列布局, StaggeredGridLayoutManager 参数表示滚动方向
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager( 3 , StaggeredGridLayoutManager. VERTICAL );
recyclerView.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter( fruitList );
recyclerView.setAdapter(adapter);
}

private void initFruits() {
for ( int i = 0 ; i < 2 ; i++) {
Fruit apple = new Fruit(getRandomLengthName( "Apple" ), R.drawable. apple_pic );
fruitList .add(apple);
Fruit banana = new Fruit(getRandomLengthName( "Banana" ), R.drawable. banana_pic );
fruitList .add(banana);
Fruit orange = new Fruit(getRandomLengthName( "Orange" ), R.drawable. orange_pic );
fruitList .add(orange);
Fruit watermelon = new Fruit(getRandomLengthName( "Watermelon" ), R.drawable. watermelon_pic );
fruitList .add(watermelon);
Fruit pear = new Fruit(getRandomLengthName( "Pear" ), R.drawable. pear_pic );
fruitList .add(pear);
Fruit grape = new Fruit(getRandomLengthName( "Grape" ), R.drawable. grape_pic );
fruitList .add(grape);
Fruit pineapple = new Fruit(getRandomLengthName( "Pineapple" ), R.drawable. pineapple_pic );
fruitList .add(pineapple);
Fruit strawberry = new Fruit(getRandomLengthName( "Strawberry" ), R.drawable. strawberry_pic );
fruitList .add(strawberry);
Fruit cherry = new Fruit(getRandomLengthName( "Cherry" ), R.drawable. cherry_pic );
fruitList .add(cherry);
Fruit mango = new Fruit(getRandomLengthName( "Mango" ), R.drawable. mango_pic );
fruitList .add(mango);
}
}
private String getRandomLengthName(String name) {
Random random = new Random();
int length = random.nextInt( 5 ) + 1 ;
StringBuilder builder = new StringBuilder();
for ( int i = 0 ; i < length; i++) {
builder.append(name);
}
return builder.toString();
}
}



FruitAdapter.java
package com.example.recyclerviewtest;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder>{

private List<Fruit> mFruitList ;

static class ViewHolder extends RecyclerView.ViewHolder {
View fruitView ;
ImageView fruitImage ;
TextView fruitName ;

public ViewHolder(View view) {
super (view);
fruitView = view;
fruitImage = (ImageView) view.findViewById(R.id. fruit_image );
fruitName = (TextView) view.findViewById(R.id. fruit_name );
}
}
//用于加载数据源到本地
public FruitAdapter(List<Fruit> fruitList) {
mFruitList = fruitList;
}
@Override
//用于创建ViewHolder实例,我的理解是所谓holder。 其实就是一个个小布局
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater. from (parent.getContext()).inflate(R.layout. fruit_item , parent, false );
final ViewHolder holder = new ViewHolder(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();
}
});
return holder;
}
@Override
//这个方法是对RecyclerView 的每一个小的子项进行赋值的。
//会在每个子项滚动到屏幕中的时候执行
public void onBindViewHolder(ViewHolder holder, int position) {
Fruit fruit = mFruitList .get(position);
holder. fruitImage .setImageResource(fruit.getImageId());
holder. fruitName .setText(fruit.getName());
}
@Override
//用于告诉RecyclerView 一共有多少个子项。很简单
public int getItemCount() {
return mFruitList .size();
}
}

Fruit.java
package com.example.recyclerviewtest;
public class Fruit {
private String name ;
private int imageId ;
public Fruit(String name, int imageId) {
this . name = name;
this . imageId = imageId;
}
public String getName() {
return name ;
}
public int getImageId() {
return imageId ;
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值