1. 在MVp包下的 Model包下 创建 MainModel 类 Model主要用于联网请求数据
2. 在MVp包下的 View包下 创建MainView 类
3. 在MVP包下的Presenter包下 创建 MainPresenter 类
4. 在在MVp包下的 View包下创建activity包,然后在包下创建 MainActivity
5. 创建包名为Base,下面一共有三个类,分别是BaseActivity,BasePresenter,IView
6. 最后最重要的 适配器
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".mvp.view.activity.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_linear_main"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="线性布局" />
<Button
android:id="@+id/btn_grid_main"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="表格布局" />
<Button
android:id="@+id/btn_st_main"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="瀑布流" />
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_show_main"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></android.support.v7.widget.RecyclerView>
</LinearLayout>
子布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="60dp">
<ImageView
android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/item_tv"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:text="kkk"
android:layout_height="wrap_content" />
</LinearLayout>
OkHttp
public class OkHttpUtils {
public static OkHttpUtils oKhttpUtils;
private final OkHttpClient okHttpClient;
private final Handler myhandler;
private OkHttpUtils() {
//日志拦截器
// HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
// httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//主线程Handler
myhandler = new Handler(Looper.getMainLooper());
okHttpClient = new OkHttpClient.Builder()
.readTimeout(5000, TimeUnit.MILLISECONDS)
.writeTimeout(5000, TimeUnit.MILLISECONDS)
.connectTimeout(5000, TimeUnit.MILLISECONDS)
// .addInterceptor(httpLoggingInterceptor)
.build();
}
public static OkHttpUtils getoKhttpUtils() {
if (oKhttpUtils == null) {
synchronized (OkHttpUtils.class) {
if (oKhttpUtils == null) {
return oKhttpUtils = new OkHttpUtils();
}
}
}
return oKhttpUtils;
}
//异步get
public void doGet(String url, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
Request request = new Request.Builder()
.get()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure(e.getMessage());
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
final String json = response.body().string();
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onResponse(json);
}
});
}
} else {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure("网络异常");
}
});
}
}
}
});
}
//异步post
public void doPost(String url, Map<String, String> map, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : map.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder()
.post(formBody)
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure(e.getMessage());
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
final String json = response.body().string();
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onResponse(json);
}
});
}
} else {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure("网络异常");
}
});
}
}
}
});
}
//接口回调
public interface IOKhttpUtilsCallback {
void onFailure(String error);
void onResponse(String json);
}
}
适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<MainBean.DataBean> list;
public MyAdapter(List<MainBean.DataBean> list) {
this.list = list;
}
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_activity, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
holder.textView.setText(list.get(position).getName());
ImageLoader.getInstance().displayImage(list.get(position).getIcon(),holder.imageView, MyApp.getOptions());
}
@Override
public int getItemCount() {
return list==null ? 0 : list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
private ImageView imageView;
public MyViewHolder(View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.item_tv);
imageView=itemView.findViewById(R.id.item_image);
}
}
}
MainModel
public class MainModel {
public void show(final IShowModelCallback iShowModelCallBack){
OkHttpUtils okHttpUtils = OkHttpUtils.getoKhttpUtils();
okHttpUtils.doGet(HttpConfig.MAIN_SHUJU, new OkHttpUtils.IOKhttpUtilsCallback() {
@Override
public void onFailure(String error) {
if (iShowModelCallBack!=null) {
iShowModelCallBack.getFaild(error);
}
}
@Override
public void onResponse(String json) {
Gson gson = new Gson();
MainBean mainBean = gson.fromJson(json, MainBean.class);
String code = mainBean.getCode();
String msg = mainBean.getMsg();
if("0".equals(code)){
iShowModelCallBack.getSuccess(mainBean);
}else{
iShowModelCallBack.getFaild(msg);
}
}
}
);
}
public interface IShowModelCallback{
void getSuccess(MainBean showBean);
void getFaild(String error);
}
}
MainView
public interface MainView extends IView {
void onSuccess(MainBean loginBean);
void onFaild(String error);
}
MainPresenter
public class MainPresenter extends BasePresenter<MainView> {
private MainModel mainModel;
public MainPresenter(MainView view) {
super(view);
}
@Override
protected void initModel() {
mainModel = new MainModel();
}
public void show(){
mainModel.show(new MainModel.IShowModelCallback(){
@Override
public void getSuccess(MainBean showBean) {
view.onSuccess(showBean);
}
@Override
public void getFaild(String error) {
view.onFaild(error);
}
}
);
}
}
IView
public interface IView {
Context context();
}
BaseActivity
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity{
protected P presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(provideLayoutId());
initViews();
initListener();
presenter=providePresenter();
initDatas();
}
protected abstract P providePresenter();
protected abstract int provideLayoutId();
protected abstract void initDatas();
protected abstract void initListener();
protected abstract void initViews();
@Override
protected void onDestroy() {
presenter.onDestroy();
super.onDestroy();
}
}
BasePresenter
public abstract class BasePresenter<V extends IView> {
protected V view;
public BasePresenter(V view){
this.view=view;
initModel();
}
protected abstract void initModel();
void onDestroy(){
view=null;
}
}
MainActivity
public class MainActivity extends BaseActivity<MainPresenter> implements View.OnClickListener,MainView {
private static final String TAG = "MainActivity--";
private Button mLinearBtn;
private Button mGridBtn;
private Button mStBtn;
private RecyclerView recyclerView;
private MyAdapter adapter;
private List<MainBean.DataBean> list = new ArrayList<>();
private MyAdapter myAdapter;
@Override
protected void initViews() {
mLinearBtn = findViewById(btn_linear_main);
mGridBtn = findViewById(R.id.btn_grid_main);
mStBtn = findViewById(R.id.btn_st_main);
recyclerView = findViewById(R.id.rv_show_main);
mLinearBtn.setOnClickListener(this);
mGridBtn.setOnClickListener(this);
mStBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_linear_main:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
break;
case R.id.btn_grid_main:
GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this,5);
gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(gridLayoutManager);
break;
case R.id.btn_st_main:
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
break;
default:
break;
}
}
@Override
public Context context() {
return this;
}
@Override
public void onSuccess(MainBean loginBean) {
List<MainBean.DataBean> data = loginBean.getData();
list.addAll(data);
myAdapter = new MyAdapter(list);
adapter = new MyAdapter(list);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
}
@Override
public void onFaild(String error) {
}
@Override
protected MainPresenter providePresenter() {
return new MainPresenter(this);
}
@Override
protected int provideLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initDatas() {
presenter.show();
}
@Override
protected void initListener() {
}
}