首先集成相关依赖
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);
}
相关github下载
https://github.com/1507D/MyApplication3
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