recyclerView+MVP实现瀑布流

首先集成相关依赖
compile 'com.squareup.okhttp3:okhttp:3.9.0'
//上下拉刷新
compile 'com.liaoinstan.springview:library:1.3.0'
compile 'com.liaoinstan.springview:library:1.2.6'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.jakewharton:butterknife:8.8.1'
//添加recycleview 分割线
compile 'com.google.code.gson:gson:2.8.1'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
// compile 'com.yqritc:recyclerview-flexibledivider:1.4.0'
compile 'com.github.bumptech.glide:glide:4.2.0'
testCompile 'junit:junit:4.12'
annotationProcessor 'com.github.bumptech.glide:compiler:4.2.0'


如果同时集成很多依赖容易出现问题可以通过加
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com'}//添加这个地址
}
}
View层

package com.bawie.myapplication;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.widget.LinearLayout;

import com.bawie.adapter.RecyclerAdapter;
import com.bawie.bean.Bean;
import com.bawie.presenter.MainPresenter;
import com.bawie.view.MainViewListener;
import com.liaoinstan.springview.container.AliFooter;
import com.liaoinstan.springview.widget.SpringView;
import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements MainViewListener {

@BindView(R.id.recycler)
RecyclerView recycler;
@BindView(R.id.springView)
SpringView springView;
private MainPresenter mainPresenter;
private RecyclerAdapter adapter;

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

//设置刷新样式
springView.setHeader(new AliFooter(this));
springView.setFooter(new AliFooter(this));

mainPresenter = new MainPresenter(this);

//设置布局管理器
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL);

recycler.setLayoutManager(manager);
adapter = new RecyclerAdapter(this);

recycler.setAdapter(adapter);
//设置分割线
HorizontalDividerItemDecoration horizontalDividerItemDecoration = new HorizontalDividerItemDecoration.Builder(this)
.color(Color.RED)
// .sizeResId(R.dimen.divider)
// .marginResId(R.dimen.leftmargin, R.dimen.rightmargin)
.build();
//分割线
recycler.addItemDecoration(horizontalDividerItemDecoration);

mainPresenter.getData(true);

//刷新监听
springView.setListener(new SpringView.OnFreshListener() {
@Override
public void onRefresh() {

mainPresenter.getData(true);

}

@Override
public void onLoadmore() {
mainPresenter.getData(true);

}
});

}

@Override
public void callBackSuccess(final Bean bean) {

//在主线程获取数据
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.setData(bean);
springView.onFinishFreshAndLoad();

}
});
}

@Override
public void callBackError(int code) {

}
}
view层实现接口
public interface MainViewListener {
//请求成功,返回数据
void callBackSuccess(Bean bean);
//请求错误返回错误信息
void callBackError(int code);
}
Presenter层
package com.bawie.presenter;

import com.bawie.bean.Bean;
import com.bawie.model.MainModel;
import com.bawie.model.MainModelListener;
import com.bawie.view.MainViewListener;

/**
* Created by win on 2017/10/14.
*/

public class MainPresenter {
private MainViewListener listener;
private MainModel mainModel;
//将View
public MainPresenter(MainViewListener listener) {
this.listener = listener;
this.mainModel = new MainModel();
}

//定义获取数据刷新的方法
public void getData(boolean b) {
mainModel.getData(b, new MainModelListener() {
@Override
public void callBackSuccess(Bean bean) {

listener.callBackSuccess(bean);
}

@Override
public void callBackError(int code) {
listener.callBackError(code);

}
});
}
}
Model层

public class MainModel {

public void getData(boolean b, final MainModelListener modelListener){

//创建OkHttpClient对象
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url("http://qhb.2dyt.com/Bwei/news?type=9&postkey=109rff1d1AK").build();

client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {

//请求失败
modelListener.callBackError(1);
}

@Override
public void onResponse(Call call, Response response) throws IOException {

String result = response.body().string();
// Log.i("onResponse", "onResponse-----------------: "+result);

Gson gson=new Gson();
Bean bean = gson.fromJson(result, Bean.class);


//请求成功
modelListener.callBackSuccess(bean);

}
});
}
}
Model层实现接口
public interface MainModelListener {
//请求成功,返回数据
void callBackSuccess(Bean bean);
//请求错误返回错误信息
void callBackError(int code);
}

获取屏幕尺寸的工具类

public class Utils {
/**
* 获取设备屏幕尺寸
* @param context
* @return
*/
public static Point getDisplayInfomation(Context context){
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return new Point(dm.widthPixels,dm.heightPixels);
}

}

//recyclerView适配加载布局
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context context;
private List<Bean.ListBean> list;

private int itemWidth;//条目宽度

public RecyclerAdapter(Context context) {

this.context = context;
//测量一次点
Point point = Utils.getDisplayInfomation(context);
itemWidth = point.x / 3;//条目宽度
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建视图
View inflate = LayoutInflater.from(context).inflate(R.layout.recycler_item, parent, false);
return new MyViewHolder(inflate);
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

if (holder instanceof MyViewHolder) {

//实际计算图片宽度
//float scale = (float) itemWidth / (float) list.get(position).getPicWidth() ;
//params.width = itemWidth;
//params.height = (int)( (float)scale * (float)list.get(position).getPicHeight()) ;
ViewGroup.LayoutParams params = ((MyViewHolder) holder).recyclerImg.getLayoutParams();
itemWidth = params.width;
//生成随机高度
int height = new Random().nextInt(1000);
params.height = height < 300 ? 300 : height;
((MyViewHolder) holder).recyclerImg.setLayoutParams(params);


Glide.with(context).load(list.get(position).getPic()).into(((MyViewHolder) holder).recyclerImg);

}

}

@Override
public int getItemCount() {
return list == null ? 0 : this.list.size();
}

//提供一个方法设置数据
public void setData(Bean bean) {
if (this.list == null) {
this.list = new ArrayList<>();
}
this.list.addAll(bean.getList());
notifyDataSetChanged();

}

class MyViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.recycler_img)
ImageView recyclerImg;

public MyViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}

}

相关github下载
https://github.com/1507D/MyApplication3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值