您的位置:首页 > 移动开发 > Android开发

Recyclerview实现瀑布流布局及条目的点击事件

2017-03-03 11:55 681 查看
package com.example.recyclerview2;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.RecyclerView;

import android.support.v7.widget.StaggeredGridLayoutManager;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

import java.util.ArrayList;

import java.util.Random;

/**

* Recyclerview实现瀑布流布局及条目的点击事件

*/

public class MainActivity extends AppCompatActivity {

private ArrayList<Fruit> mFruitsList;
private RecyclerView recyclerview;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();
initData();
initAdapter();
}

/**
* 初始化数据适配器
*/
private void initAdapter() {
recyclerview.setAdapter(new FruitAdapter());
}

/**
* 初始化数据
*/
private void initData() {
mFruitsList = new ArrayList<>();
mFruitsList.add(new Fruit(getRandomLengthName("apple"), R.drawable.apple_pic));
mFruitsList.add(new Fruit(getRandomLengthName("banana"), R.drawable.banana_pic));
mFruitsList.add(new Fruit(getRandomLengthName("cherry"), R.drawable.cherry_pic));
mFruitsList.add(new Fruit(getRandomLengthName("grape"), R.drawable.grape_pic));
mFruitsList.add(new Fruit(getRandomLengthName("mango"), R.drawable.mango_pic));
mFruitsList.add(new Fruit(getRandomLengthName("orange"), R.drawable.orange_pic));
mFruitsList.add(new Fruit(getRandomLengthName("pear"), R.drawable.pear_pic));
mFruitsList.add(new Fruit(getRandomLengthName("pineapple"), R.drawable.pineapple_pic));
mFruitsList.add(new Fruit(getRandomLengthName("strawberry"), R.drawable.strawberry_pic));
mFruitsList.add(new Fruit(getRandomLengthName("watermelon"), R.drawable.watermelon_pic));
}

/**
* 随机长度水果名称
*
* @param name 水果名称
* @return 1-20随机水果名称长度
*/
private String getRandomLengthName(String name) {
Random random = new Random();
int nextInt = random.nextInt(20);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <= nextInt; i++) {
stringBuilder.append(name);
}
return stringBuilder.toString();
}

private void initView() {
recyclerview = (RecyclerView) findViewById(R.id.recyclerview);

// 设置瀑布流布局,3列,垂直布局
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,
StaggeredGridLayoutManager.VERTICAL);
recyclerview.setLayoutManager(layoutManager);
}

private class FruitAdapter extends RecyclerView.Adapter<ViewHolder> {

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(getApplicationContext(), R.layout.recyclerview_item, null);
return new ViewHolder(view);
}

// 在这个方法中设置recyclerview条目的点击事件
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final Fruit fruit = mFruitsList.get(position);
holder.iv.setImageResource(fruit.imageId);
holder.tv.setText(fruit.name);

holder.iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了图片" + fruit.name, Toast.LENGTH_SHORT).show();
}
});
holder.tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了文字" + fruit.name, Toast.LENGTH_SHORT).show();
}
});
}

@Override
public int getItemCount() {
return mFruitsList.size();
}
}

private static class ViewHolder extends RecyclerView.ViewHolder {
ImageView iv;
TextView tv;

ViewHolder(View itemView) {
super(itemView);
iv = (ImageView) itemView.findViewById(R.id.iv);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}


}

package com.example.recyclerview2;

/**

* Created by My on 2017/3/3.

*/

class Fruit {

String name;

int imageId;

Fruit(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 瀑布流 布局