您的位置:首页 > 编程语言 > Java开发

RecyclerView列表九宫格瀑布流,多条目,SpringView实现上拉下拉刷新

2017-11-08 21:17 477 查看
首先导入RecyclerView的依赖,SpringView的依赖

compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.liaoinstan.springview:library:1.3.0'
build.gradle里面的
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.+'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.liaoinstan.springview:library:1.3.0'
}


导入依赖,编译完成之后,

application中初始化imageloader

<application

android:name=".MyApplication"

</application>
public class MyApplication extends Application{

@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(configuration);
}
}


activity_main

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<!--外层是springview-->

<com.liaoinstan.springview.widget.SpringView
android:layout_width="match_parent"
android:id="@+id/springview"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerview" >
</android.support.v7.widget.RecyclerView>
</com.liaoinstan.springview.widget.SpringView>
</RelativeLayout>
MainActivity里面获取id,设置装数据的集合,设置布局管理器,设置适配器,设置springview上拉下拉
public class MainActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private List<String> list;
private SpringView springView;
private List<String> listbig = new ArrayList<>();
private MutiAdapter adapter;

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

recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
springView = (SpringView) findViewById(R.id.springview);
list = new ArrayList<>();
//集合里装着图片的网址
list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");
list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");
listbig.addAll(list);
//new适配器,,RecyclerAdapter里面是普通的
//final RecyclerAdapter adapter = new RecyclerAdapter(MainActivity.this,listbig);
//MutiAdapter是多条目的
adapter = new MutiAdapter(MainActivity.this,listbig);
//设置布局管理器

//recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,3));//九宫格布局
//瀑布式布局
//  recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL));

recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));
recyclerView.setAdapter(adapter);

//接口的实现,new接口
adapter.setDianjiCallBack(new DianjiCallBack() {
@Override
public void dianji(View view, int position) {
Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show();
}
});
springView.setHeader(new DefaultHeader(this));
springView.setFooter(new DefaultFooter(this));

springView.setListener(new SpringView.OnFreshListener() {
@Override
public void onRefresh() {
//下拉刷新
springView.onFinishFreshAndLoad();
listbig.addAll(0,list);
adapter.notifyDataSetChanged();
}

@Override
public void onLoadmore() {
//上拉加载
springView.onFinishFreshAndLoad();
listbig.addAll(list);
adapter.notifyDataSetChanged();
}
});
}
}


填充到适配器里面的布局layout_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">

<ImageView
android:src="@mipmap/ic_launcher"
android:scaleType="centerCrop"
android:id="@+id/item_imageview"
android:layout_width="140dp"
android:layout_height="120dp" />
</LinearLayout>
接口
public interface DianjiCallBack {
public void dianji(View view,int position);
}
RecyclerAdapter
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ImageViewHolder>{

Context context;
List<String> listbig;
//定义宽度
private int itemWidth;

public RecyclerAdapter(Context context, List<String> listbig) {
this.listbig = listbig;
this.context = context;

//设置宽度
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

int width = wm.getDefaultDisplay().getWidth();
itemWidth = width / 3;//定义固定的宽度
}

@Override
//创建viewholder
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建一个view
View view = View.inflate(context, R.layout.layout_item,null);

//newviewholder将引入的布局视图传进去
ImageViewHolder imageViewHolder = new ImageViewHolder(view);
return imageViewHolder;
}

@Override
//绑定view 显示数据
public void onBindViewHolder(ImageViewHolder holder, final int position) {
//设置高
ViewGroup.LayoutParams params = holder.itemimageview.getLayoutParams();

//初始高度300
int itemHeight = 300;

itemHeight = new Random().nextInt(500);
if(itemHeight < 300){
itemHeight = 300;
}

//给imageview设置宽高
params.width = itemWidth;
params.height = itemHeight;

holder.itemimageview.setLayoutParams(params);

//显示图片
ImageLoader.getInstance().displayImage(listbig.get(position),holder.itemimageview);

//设置点击事件,
holder.itemimageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dianjiCallBack.dianji(v,position);
}
});
}

@Override
public int getItemCount() {
return listbig.size();//集合的长度
}

//必须写的viewholder
static class ImageViewHolder extends RecyclerView.ViewHolder {

private final ImageView itemimageview;

public ImageViewHolder(View itemView) {
super(itemView);
//itemview是传进来的view视图,获取里面的id
itemimageview = (ImageView) itemView.findViewById(R.id.item_imageview);
}
}

//接口的实现
DianjiCallBack dianjiCallBack;
public void setDianjiCallBack(DianjiCallBack dianjiCallBack){
this.dianjiCallBack = dianjiCallBack;
}
}


另一个多条目适配器,引入两个不同的布局
muti_item1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:gravity="center"
android:layout_height="match_parent">

<ImageView
android:src="@mipmap/ic_launcher"
android:scaleType="centerCrop"
android:id="@+id/item1_imageview"
android:layout_width="140dp"
android:layout_height="170dp" />

</LinearLayout>
muti_item2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:gravity="center"
android:orientation="horizontal"
android:layout_height="match_parent">

<ImageView
android:src="@mipmap/ic_launcher"
android:id="@+id/item2_imageview"
android:layout_width="120dp"
android:layout_height="100dp" />

<TextView

android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/item2_textview"/>

</LinearLayout>
另一个适配器.多条目的,里面拥有多个viewholder
public class MutiAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

Context context;
List<String> listbig;
private ViewHolder1 holder1;
private ViewHolder2 holder2;

public MutiAdapter(Context context, List<String> listbig) {
this.context = context;
this.listbig = listbig;
}

//创建布局的
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == 0){
//如果类型是0
View view = View.inflate(context,R.layout.muti_item1,null);
holder1 = new ViewHolder1(view);
return holder1;
}else{
View view = View.inflate(context,R.layout.muti_item2,null);
holder2 = new ViewHolder2(view);
return holder2;
}

}

//绑定 显示view
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

//判断是哪个viewholder
if(holder instanceof ViewHolder1){
//将holder强转成viewholder1
ViewHolder1 viewHolder1 = (ViewHolder1) holder;
//设置显示的内容
ImageLoader.getInstance().displayImage(listbig.get(position),viewHolder1.item1_imageview);

viewHolder1.item1_imageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//接口回调
dianjiCallBack.dianji(v,position);
}
});
}else{
//强转
ViewHolder2 viewHolder2 = (ViewHolder2) holder;
//设置显示的内容
viewHolder2.item2_textview.setText("这是第"+(position+1)+"个");
ImageLoader.getInstance().displayImage(listbig.get(position),viewHolder2.item2_imageview);

//给控件设置点击事件
viewHolder2.item2_imageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dianjiCallBack.dianji(v,position);
}
});
}
}

//条目的数量
@Override
public int getItemCount() {
return listbig.size();//集合的长度
}

@Override
public int getItemViewType(int position) {
return position % 2;//两种类型,,就是0或1
}

//两种条目的viewholder
static class ViewHolder1 extends RecyclerView.ViewHolder {

private final ImageView item1_imageview;

public ViewHolder1(View itemView) {
super(itemView);
item1_imageview = (ImageView) itemView.findViewById(R.id.item1_imageview);
}
}

static class ViewHolder2 extends RecyclerView.ViewHolder{

private final ImageView item2_imageview;
private final TextView item2_textview;

public ViewHolder2(View itemView) {
super(itemView);
item2_imageview = (ImageView) itemView.findViewById(R.id.item2_imageview);
item2_textview = (TextView) itemView.findViewById(R.id.item2_textview);
}
}

//接口的实现
DianjiCallBack dianjiCallBack;
public void setDianjiCallBack(DianjiCallBack dianjiCallBack){
this.dianjiCallBack = dianjiCallBack;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐