MVP实现Recy多条目展示

IView

public interface IView {
    Context context();
}

DataCall–继承IView

public interface DataCall extends IView {
    void onSuccess(NewsBean newBean);

    void LoginSuccess(LoginBean loginBean);

    void onFaild(String error);
}

LoginModel

 public void getLogin(String moblie, String pwd, final IMainModelCallback2 iMainModelCallback) {
        OkHttpUtils oKhttpUtils = OkHttpUtils.getoKhttpUtils();
        //"http://www.zhaoapi.cn/user/login?mobile=" + mobile + "" + "&password=" + pwd
        oKhttpUtils.doGet(HttpConfig.urlLogin + "?mobile=" + moblie + "" + "&password=" + pwd, new OkHttpUtils.IOKhttpUtilsCallback() {
            @Override
            public void onFailure(String error) {
                if (iMainModelCallback != null) {
                    iMainModelCallback.getFaild(error);
                }
            }

            @Override
            public void onResponse(String json) {
                LoginBean loginBean = new Gson().fromJson(json, LoginBean.class);
                String code = loginBean.getCode();
                if (code.equals("0")) {
                    if (iMainModelCallback != null) {
                        iMainModelCallback.getSuccess(loginBean);
                    }
                } else {
                    if (iMainModelCallback != null) {
                        iMainModelCallback.getFaild("请求数据失败");
                    }
                }

            }
        });
    }

    public interface IMainModelCallback2 {
        void getSuccess(LoginBean loginBean);

        void getFaild(String error);
    }

NewsModel

 public void getNews(Integer page, final IMainModelCallback iMainModelCallback) {
        OkHttpUtils oKhttpUtils = OkHttpUtils.getoKhttpUtils();
        oKhttpUtils.doGet(HttpConfig.url + "?page=" + page, new OkHttpUtils.IOKhttpUtilsCallback() {
            @Override
            public void onFailure(String error) {
                if (iMainModelCallback != null) {
                    iMainModelCallback.getFaild(error);
                }
            }

            @Override
            public void onResponse(String json) {
                NewsBean newBean = new Gson().fromJson(json, NewsBean.class);
                int code = newBean.getCode();
                if (1 == code) {
                    if (iMainModelCallback != null) {
                        iMainModelCallback.getSuccess(newBean);
                    }
                } else {
                    if (iMainModelCallback != null) {
                        iMainModelCallback.getFaild("请求数据失败");
                    }
                }

            }
        });
    }

    public interface IMainModelCallback {
        void getSuccess(NewsBean newsBean);

        void getFaild(String error);
    }

HttpUtils

 public static OkHttpUtils oKhttpUtils;
    private final OkHttpClient okHttpClient;
    private final Handler handler;

    private OkHttpUtils() {
        //主线程Handler
        handler = new Handler(Looper.getMainLooper());
        okHttpClient = new OkHttpClient.Builder()
                .readTimeout(5000, TimeUnit.MILLISECONDS)
                .writeTimeout(5000, TimeUnit.MILLISECONDS)
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
                .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) {
                    //切换到主线程
                    handler.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) {
                        //切换到主线程
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onResponse(json);
                            }
                        });
                    }


                } else {
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        handler.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) {
                    //切换到主线程
                    handler.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) {
                        //切换到主线程
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onResponse(json);
                            }
                        });
                    }

                } else {
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onFailure("网络异常");
                            }
                        });
                    }
                }
            }
        });
    }


    //接口回调
    public interface IOKhttpUtilsCallback {
        void onFailure(String error);

        void onResponse(String json);
    }

BasePresenter–泛型继承Iview

public abstract class BasePresenter<V extends IView> {
    protected V view;

    public BasePresenter(V view) {
        this.view = view;
        initModel();
    }

    protected abstract void initModel();

    public void onDestroy() {
        view = null;
    }
}

LoginProsenter

在这里插入代码片public class LoginPresenter extends BasePresenter<DataCall> {


    private LoginModel loginModel;

    public LoginPresenter(DataCall view) {
        super(view);
    }

    @Override
    protected void initModel() {
        loginModel = new LoginModel();
    }

    public void getLogin(String moblie, String pwd) {
        loginModel.getLogin(moblie, pwd, new LoginModel.IMainModelCallback2() {
            @Override
            public void getSuccess(LoginBean loginBean) {
                if (view != null) {
                    view.LoginSuccess(loginBean);
                }
            }

            @Override
            public void getFaild(String error) {
                if (view != null) {
                    view.onFaild(error);
                }
            }
        });
    }
}

NewsPresenter

public class NewsPresenter extends BasePresenter<DataCall> {

    private NewsModel newsModel;

    public NewsPresenter(DataCall view) {
        super(view);
    }

    @Override
    protected void initModel() {
        newsModel = new NewsModel();
    }

    public void getNews(Integer page) {
        newsModel.getNews(page, new NewsModel.IMainModelCallback() {
            @Override
            public void getSuccess(NewsBean newsBean) {
                if (view != null) {
                    view.onSuccess(newsBean);
                }
            }
            @Override
            public void getFaild(String error) {
                if (view != null) {
                    view.onFaild(error);
                }
            }
        });
    }
}

多条目Adapter

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<NewsBean.DataBean> list;
    private static final int viewType01 = 0;
    private static final int viewType02 = 1;
    private Context context;

    public MyAdapter(List<NewsBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView01 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item1, parent, false);
        View itemView02 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2, parent, false);
        if (viewType == viewType01) {
            return new MyViewHolder01(itemView01);
        }
        return new MyViewHolder02(itemView02);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        if (holder instanceof MyViewHolder01) {
            ((MyViewHolder01) holder).textView01.setText(list.get(position).getTitle());
            ((MyViewHolder01) holder).textView02.setText(list.get(position).getAuthor_name() + "描述");
            String url = list.get(position).getThumbnail_pic_s();
            Glide.with(context).load(url).into(((MyViewHolder01) holder).imageView);
            ((MyViewHolder01) holder).imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onItemClickListener.OnItemClick(v, position);
                }
            });
            //长按
            ((MyViewHolder01) holder).imageView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    onItemLongClickListener.OnItemLongClick(v, position);
                    return true;
                }
            });
        } else if (holder instanceof MyViewHolder02) {
            ((MyViewHolder02) holder).textView01.setText(list.get(position).getTitle());
            ((MyViewHolder02) holder).textView02.setText(list.get(position).getAuthor_name());
            String url0 = list.get(position).getThumbnail_pic_s();
            String url1 = list.get(position).getThumbnail_pic_s02();
            String url2 = list.get(position).getThumbnail_pic_s03();
            Glide.with(context).load(url0).into(((MyViewHolder02) holder).imageView);
            Glide.with(context).load(url1).into(((MyViewHolder02) holder).imageView2);
            Glide.with(context).load(url2).into(((MyViewHolder02) holder).imageView3);
            //   ImageLoader.getInstance().displayImage(url0, ((MyViewHolder02) holder).imageView, MyApp.getOptions());
            ((MyViewHolder02) holder).imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onItemClickListener.OnItemClick(v, position);
                }
            });
            ((MyViewHolder02) holder).imageView2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onItemClickListener.OnItemClick(v, position);
                }
            });
            ((MyViewHolder02) holder).imageView3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onItemClickListener.OnItemClick(v, position);
                }
            });
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    onItemLongClickListener.OnItemLongClick(v, position);
                    return true;
                }
            });
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0) {
            return viewType01;
        } else {
            return viewType02;
        }
    }

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

    public class MyViewHolder01 extends RecyclerView.ViewHolder {
        private TextView textView01, textView02;
        private ImageView imageView;

        public MyViewHolder01(View itemView) {
            super(itemView);
            textView01 = itemView.findViewById(R.id.item_tv);
            textView02 = itemView.findViewById(R.id.item_tvv);
            imageView = itemView.findViewById(R.id.item_img);
        }
    }

    public class MyViewHolder02 extends RecyclerView.ViewHolder {
        private TextView textView01, textView02;
        private ImageView imageView, imageView2, imageView3;

        public MyViewHolder02(View itemView) {
            super(itemView);
            textView01 = itemView.findViewById(R.id.title);
            textView02 = itemView.findViewById(R.id.pinglun);
            imageView = itemView.findViewById(R.id.imageView);
            imageView2 = itemView.findViewById(R.id.imageView2);
            imageView3 = itemView.findViewById(R.id.imageView3);
        }
    }


    private OnItemClickListener onItemClickListener;

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

    public interface OnItemClickListener {
        void OnItemClick(View view, int position);
    }

    private OnItemLongClickListener onItemLongClickListener;

    public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
        this.onItemLongClickListener = onItemLongClickListener;
    }

    public interface OnItemLongClickListener {
        void OnItemLongClick(View view, int position);
    }
}

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();
    }
}

LoginActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener, DataCall {
    private static final String TAG = "MainActivity+++++";
    private TextView mTxtName;
    /**
     * 登陆
     */
    private Button mBtnLogin;
    private RecyclerView mRecy;
    private MyAdapter adapter;
    private List<NewsBean.DataBean> list;
    private NewsPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        presenter.getNews(1);
        Intent intent = getIntent();
        String username = intent.getStringExtra("username");
        mTxtName.setText(username);
    }

    private void initView() {
        mTxtName = findViewById(R.id.txt_name);
        mBtnLogin = findViewById(R.id.btn_login);
        mBtnLogin.setOnClickListener(this);
        mRecy = findViewById(R.id.recy);
        presenter = new NewsPresenter(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.btn_login:
                Intent intent = new Intent(MainActivity.this, ScendActivity.class);
                startActivity(intent);
                finish();
                break;
        }
    }

    @Override
    public void onSuccess(NewsBean newBean) {
        list = newBean.getData();
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecy.setLayoutManager(linearLayoutManager);
        adapter = new MyAdapter(list, MainActivity.this);
        mRecy.setAdapter(adapter);
        //点击图片改变  透明
        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void OnItemClick(View view, int position) {
                ObjectAnimator alpha = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f, 1f);
                alpha.setDuration(5000);
                alpha.start();
            }
        });
        adapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
            @Override
            public void OnItemLongClick(View view, final int position) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("数据");
                builder.setMessage("确定删除吗");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        list.remove(position);
                        adapter.notifyDataSetChanged();
                    }
                });
                builder.setNegativeButton("取消", null);
                builder.show();
            }
        });
    }

    @Override
    public void LoginSuccess(LoginBean loginBean) {

    }

    @Override
    public void onFaild(String error) {

    }

    @Override
    public Context context() {
        return this;
    }
}

NewsActivity

public class ScendActivity extends AppCompatActivity implements View.OnClickListener, DataCall {

    /**
     * 请输入用户名...
     */
    private EditText mEdName;
    /**
     * 请输入密码...
     */
    private EditText mEdPwd;
    /**
     * 登录登录
     */
    private Button mBtnLogin;
    private LoginPresenter presenter;
    private String moblie;

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

    private void initView() {
        mEdName = findViewById(R.id.ed_name);
        mEdPwd = findViewById(R.id.ed_pwd);
        mBtnLogin = findViewById(R.id.btn_login);
        mBtnLogin.setOnClickListener(this);

        presenter = new LoginPresenter(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.btn_login:
                moblie = mEdName.getText().toString().trim();
                String pwd = mEdPwd.getText().toString().trim();
                presenter.getLogin(moblie, pwd);

                break;
        }
    }

    @Override
    public void onSuccess(NewsBean newBean) {

    }

    @Override
    public void LoginSuccess(LoginBean loginBean) {
        Toast.makeText(ScendActivity.this, "" + loginBean.getMsg(), Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(ScendActivity.this, MainActivity.class);
        intent.putExtra("username", moblie);
        startActivity(intent);
    }

    @Override
    public void onFaild(String error) {
        Toast.makeText(ScendActivity.this, "666666666666" , Toast.LENGTH_SHORT).show();

    }

    @Override
    public Context context() {
        return this;
    }
}

猜你喜欢

转载自blog.csdn.net/LG_lxb/article/details/85011685