MVP框整理

activity是入口

package com.bawei.zhou1.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.Toast;

import com.bawei.zhou1.R;
import com.bawei.zhou1.adapter.MyAdapter;
import com.bawei.zhou1.presenter.ShowPresenter;
import com.bawei.zhou1.view.ShowVoid;

import org.json.JSONArray;

public class ShowActivity extends AppCompatActivity implements ShowVoid {

private RecyclerView rel;
private ShowPresenter showPresenter;

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

    //找控件
    rel = findViewById(R.id.rel);

    //创建布局管理器
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    //设置布局管理器
    rel.setLayoutManager(linearLayoutManager);

    //MVP
    //实例化presenter
    showPresenter = new ShowPresenter(this);

    //关联p层
    showPresenter.related();


}

@Override
public void view(JSONArray result) {

    MyAdapter myAdapter = new MyAdapter(this,result);
    rel.setAdapter(myAdapter);
    myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
        @Override
        public void OnClick(int i) {
            Toast.makeText(ShowActivity.this, "第"+i+"个", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void OnLongClick(int i) {
            Toast.makeText(ShowActivity.this, "长按事件", Toast.LENGTH_SHORT).show();
        }
    });
}

//销毁

@Override
protected void onDestroy() {
    super.onDestroy();
    showPresenter.detachView();
    Log.i("xxx","销毁了");
}

}

把数据传到presenter
package com.bawei.zhou1.presenter;

import com.bawei.zhou1.activity.ShowActivity;
import com.bawei.zhou1.model.ShowModel;
import com.bawei.zhou1.view.ShowVoid;

import org.json.JSONArray;

import java.lang.ref.WeakReference;

/**

  • @author 王艺霏

  • @fileName ShowPresenter

  • @package com.bawei.zhou1.presenter
    **/
    public class ShowPresenter {

    private final ShowModel showModel;
    private final ShowVoid showVoid;
    private WeakReference tWeakReference;

    //在构造方法里实例化model
    public ShowPresenter(ShowVoid view){
    showModel = new ShowModel();
    showVoid = view;
    }

    //接收从activity传来的
    public void related() {
    //一个方法传到model
    showModel.getGoods();
    showModel.setOnShowLisenter(new ShowModel.OnShowLisenter() {
    @Override
    public void onShow(JSONArray result) {
    showVoid.view(result);
    }
    });
    }
    //泄露
    public void attachView(T t){
    tWeakReference = new WeakReference<>(t);
    }

    public void detachView(){
    if (tWeakReference.get()!=null){
    tWeakReference.clear();
    tWeakReference=null;
    }
    }
    }

在把数据传到model
package com.bawei.zhou1.model;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.bawei.zhou1.utils.OkHttpUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

/**

  • @author 王艺霏

  • @fileName ShowModel

  • @package com.bawei.zhou1.model
    **/
    public class ShowModel {
    //创建接口
    public interface OnShowLisenter{
    void onShow(JSONArray result);
    }
    //声明接口
    public OnShowLisenter onShowLisenter;
    //set接口
    public void setOnShowLisenter(OnShowLisenter onShowLisenter){
    this.onShowLisenter=onShowLisenter;
    }
    private String url =“http://172.17.8.100/small/commodity/v1/bannerShow”;
    //handler
    private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    switch (msg.what){
    case 0:
    String json = (String) msg.obj;
    try {
    JSONObject jsonObject = new JSONObject(json);
    JSONArray result = jsonObject.getJSONArray(“result”);
    if (onShowLisenter!=null){
    onShowLisenter.onShow(result);
    }
    } catch (JSONException e) {
    e.printStackTrace();
    }

                 break;
         }
     }
    

    };
    //从p传来的
    public void getGoods() {
    OkHttpUtils.getInstance().doGet(url,new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {

         }
    
         @Override
         public void onResponse(Call call, Response response) throws IOException {
             //得到响应码
             String json = response.body().string();
             Log.i("xxx",json);
    
             Message message = new Message();
             message.what=0;
             message.obj=json;
             handler.sendMessage(message);
         }
     });
    

    }
    }

写适配器(展示数据写 注册登录不用)
package com.bawei.zhou1.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
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.bawei.zhou1.R;
import com.nostra13.universalimageloader.core.ImageLoader;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**

  • @author 王艺霏

  • @fileName MyAdapter

  • @package com.bawei.zhou1.adapter
    **/
    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    Context context;
    JSONArray result;
    public MyAdapter(Context context,JSONArray result){
    this.context=context;
    this.result=result;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    //带入布局 实例化viewholder
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.lay,null,false);
    MyViewHolder myViewHolder = new MyViewHolder(view);
    return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
    //解析数据并赋值
    try {
    JSONObject jsonObject = result.getJSONObject(i);
    String title = jsonObject.getString(“title”);
    String img = jsonObject.getString(“imageUrl”);
    //赋值
    myViewHolder.name.setText(title);
    ImageLoader.getInstance().displayImage(img,myViewHolder.img);

         //点击事件
         myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 onItemClickListener.OnClick(i);
             }
         });
         //长按事件
         myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
             @Override
             public boolean onLongClick(View v) {
                 onItemClickListener.OnLongClick(i);
                 return true;
             }
         });
     } catch (JSONException e) {
         e.printStackTrace();
     }
    

    }

    @Override
    public int getItemCount() {
    return result.length();
    }

    //自定义一个内部的ViewHolder
    public class MyViewHolder extends RecyclerView.ViewHolder{

     private final TextView name;
     private final ImageView img;
    
     public MyViewHolder(@NonNull View itemView) {
         super(itemView);
         name = itemView.findViewById(R.id.name);
         img = itemView.findViewById(R.id.img);
     }
    

    }

    //定义接口
    public interface OnItemClickListener{
    void OnClick(int i);
    void OnLongClick(int i);
    }
    //声明接口
    private OnItemClickListener onItemClickListener;

    //set
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){
    this.onItemClickListener=onItemClickListener;
    }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值