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

Android 开发之 RecyclerView Adapter 模板

2017-06-14 15:30 435 查看
之前 ListView 控件的功能已足够强大;如今出来许久的 RecyclerView 基本上已经覆盖了它的很多功能,先写我们看看效果图:









1,先在 app 文件夹下的build.gradle 文件添加:

compile 'com.android.support:recyclerview-v7:25.2.0'


2,主布局文件:

<?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"
tools:context="com.gyq.recyclerviewdemo.MainActivity">

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

</RelativeLayout>


3,item 布局文件(根据不同分格,做出相应的变化):

<?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="wrap_content"
android:layout_margin="5dp">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center_vertical"/>

<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"/>
</LinearLayout>


4,FruitAdapter.java

package com.gyq.recyclerviewdemo.adapter;

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 com.gyq.recyclerviewdemo.R;
import com.gyq.recyclerviewdemo.entity.Fruit;

import java.util.List;

/**
* Created by gyq on 2017/6/14 09:16
*/
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private List<Fruit> mFruitInfos;

static class ViewHolder extends RecyclerView.ViewHolder {
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View itemView) {
super(itemView);

fruitImage = (ImageView)itemView.findViewById(R.id.fruit_image);
fruitName = (TextView)itemView.findViewById(R.id.fruit_name);
}
}

public FruitAdapter(List<Fruit> fruitInfos) {
this.mFruitInfos = fruitInfos;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_fruitlist, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Fruit fruit = mFruitInfos.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
}

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


5,Fruit.java 实体类

package com.gyq.recyclerviewdemo.entity;

/**
* Created by gyq on 2017/6/13 14:44
*/
public class Fruit {
private String name;
private int imageId;

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

public int getImageId() {
return imageId;
}

public String getName() {
return name;
}

}


6,MainActivity.java

public class MainActivity extends AppCompatActivity {
private List<Fruit> mInfos = new ArrayList<>();

private RecyclerView mRecyclerView;

private CommonAdapter<Fruit> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initDatas();

mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);

LinearLayoutManager manager = new LinearLayoutManager(this);
//横向滚动
//manager.setOrientation(LinearLayoutManager.HORIZONTAL);
//网格布局
//GridLayoutManager manager = new GridLayoutManager(this,3);

//瀑布流
//StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);
FruitAdapter adapter = new FruitAdapter(mInfos);
mRecyclerView.setAdapter(adapter);

}

private void initDatas() {
for (int i = 0;i < 2;i++) {
Fruit apple = new Fruit("Apple",R.drawable.apple);
mInfos.add(apple);

Fruit apricot = new Fruit("Apricot",R.drawable.apricot);
mInfos.add(apricot);

Fruit banana = new Fruit("Banana",R.drawable.banana);
mInfos.add(banana);

Fruit cherry = new Fruit("Cherry",R.drawable.cherry);
mInfos.add(cherry);

Fruit kiwi = new Fruit("Kiwi",R.drawable.kiwi);
mInfos.add(kiwi);

Fruit lemon = new Fruit("Lemon",R.drawable.lemon);
mInfos.add(lemon);

Fruit mango = new Fruit("Mango",R.drawable.mango);
mInfos.add(mango);

Fruit orange = new Fruit("Orange",R.drawable.orange);
mInfos.add(orange);

Fruit peach = new Fruit("Peach",R.drawable.peach);
mInfos.add(peach);

Fruit pear = new Fruit("Pear",R.drawable.pear);
mInfos.add(pear);

Fruit strawberry = new Fruit("Strawberry",R.drawable.strawberry);
mInfos.add(strawberry);

Fruit tomato = new Fruit("Tomato",R.drawable.tomato);
mInfos.add(tomato);
}
}

private String getRandomLengthName(String name) {
Random random = new Random();
int length = random.nextInt(20) + 1;

StringBuilder builder = new StringBuilder();
for (int i = 0;i < length;i++) {
builder.append(name);
}

return builder.toString();
}
}


使用万能适配器

1,先在 app 文件夹下的build.gradle 文件添加:

compile 'com.zhy:base-rvadapter:3.0.3'


2,直接使用:

package com.gyq.recyclerviewdemo;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.gyq.recyclerviewdemo.entity.Fruit;
import com.zhy.adapter.recyclerview.CommonAdapter;
import com.zhy.adapter.recyclerview.base.ViewHolder;
import com.zhy.adapter.recyclerview.wrapper.HeaderAndFooterWrapper;
import com.zhy.adapter.recyclerview.wrapper.LoadMoreWrapper;

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

public class MainActivity extends AppCompatActivity {
private List<Fruit> mInfos = new ArrayList<>();

private RecyclerView mRecyclerView;

private CommonAdapter<Fruit> mAdapter;

private HeaderAndFooterWrapper mHeaderAndFooterWrapper;

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

initDatas();

mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);

LinearLayoutManager manager = new LinearLayoutManager(this);
//横向滚动
//manager.setOrientation(LinearLayoutManager.HORIZONTAL);
//网格布局
//GridLayoutManager manager = new GridLayoutManager(this,3);

//瀑布流
//StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);

//添加分隔线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
/*FruitAdapter adapter = new FruitAdapter(mInfos);
mRecyclerView.setAdapter(adapter);*/

mAdapter = new CommonAdapter<Fruit>(this,R.layout.item_fruitlist,mInfos) {
@Override
protected void convert(ViewHolder holder, Fruit fruit, int position) {
holder.setText(R.id.fruit_name,fruit.getName());
holder.setImageResource(R.id.fruit_image,fruit.getImageId());
}
};

initHeaderAndFooter();

mLoadMoreWrapper = new LoadMoreWrapper(mHeaderAndFooterWrapper);
mLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);
mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener()
{
@Override
public void onLoadMoreRequested()
{
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
for (int i = 0;i < 10;i++) {
Fruit apple = new Fruit("Apple",R.drawable.apple);
mInfos.add(apple);

}
mLoadMoreWrapper.notifyDataSetChanged();

}
}, 3000);
}
});

mRecyclerView.setAdapter(mLoadMoreWrapper);

mAdapter.setOnItemClickListener(new CommonAdapter.OnItemClickListener()
{
@Override
public void onItemClick(View view, RecyclerView.ViewHolder holder, int position)
{
Toast.makeText(MainActivity.this, "pos = " + position, Toast.LENGTH_SHORT).show();
mAdapter.notifyItemRemoved(position);
}

@Override
public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position)
{
return false;
}
});

}

private void initHeaderAndFooter() {
mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter);

TextView t1 = new TextView(this);
t1.setText("Header 1");
TextView t2 = new TextView(this);
t2.setText("Header 2");
mHeaderAndFooterWrapper.addHeaderView(t1);
mHeaderAndFooterWrapper.addHeaderView(t2);
}

private void initDatas() {
for (int i = 0;i < 2;i++) {
Fruit apple = new Fruit("Apple",R.drawable.apple);
mInfos.add(apple);

Fruit apricot = new Fruit("Apricot",R.drawable.apricot);
mInfos.add(apricot);

Fruit banana = new Fruit("Banana",R.drawable.banana);
mInfos.add(banana);

Fruit cherry = new Fruit("Cherry",R.drawable.cherry);
mInfos.add(cherry);

Fruit kiwi = new Fruit("Kiwi",R.drawable.kiwi);
mInfos.add(kiwi);

Fruit lemon = new Fruit("Lemon",R.drawable.lemon);
mInfos.add(lemon);

Fruit mango = new Fruit("Mango",R.drawable.mango);
mInfos.add(mango);

Fruit orange = new Fruit("Orange",R.drawable.orange);
mInfos.add(orange);

Fruit peach = new Fruit("Peach",R.drawable.peach);
mInfos.add(peach);

Fruit pear = new Fruit("Pear",R.drawable.pear);
mInfos.add(pear);

Fruit strawberry = new Fruit("Strawberry",R.drawable.strawberry);
mInfos.add(strawberry);

Fruit tomato = new Fruit("Tomato",R.drawable.tomato);
mInfos.add(tomato);
}
}

private String getRandomLengthName(String name) {
Random random = new Random();
int length = random.nextInt(20) + 1;

StringBuilder builder = new StringBuilder();
for (int i = 0;i < length;i++) {
builder.append(name);
}

return builder.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: