MVP实现Recy多条目展示
生活随笔
收集整理的這篇文章主要介紹了
MVP实现Recy多条目展示
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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=" + pwdoKhttpUtils.doGet(HttpConfig.urlLogin + "?mobile=" + moblie + "" + "&password=" + pwd, new OkHttpUtils.IOKhttpUtilsCallback() {@Overridepublic void onFailure(String error) {if (iMainModelCallback != null) {iMainModelCallback.getFaild(error);}}@Overridepublic 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("請(qǐng)求數(shù)據(jù)失敗");}}}});}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() {@Overridepublic void onFailure(String error) {if (iMainModelCallback != null) {iMainModelCallback.getFaild(error);}}@Overridepublic 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("請(qǐng)求數(shù)據(jù)失敗");}}}});}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() {//主線程Handlerhandler = 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;}//異步getpublic 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() {@Overridepublic void onFailure(Call call, final IOException e) {if (ioKhttpUtilsCallback != null) {//切換到主線程handler.post(new Runnable() {@Overridepublic void run() {ioKhttpUtilsCallback.onFailure(e.getMessage());}});}}@Overridepublic 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() {@Overridepublic void run() {ioKhttpUtilsCallback.onResponse(json);}});}} else {if (ioKhttpUtilsCallback != null) {//切換到主線程handler.post(new Runnable() {@Overridepublic void run() {ioKhttpUtilsCallback.onFailure("網(wǎng)絡(luò)異常");}});}}}});}//異步postpublic 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() {@Overridepublic void onFailure(Call call, final IOException e) {if (ioKhttpUtilsCallback != null) {//切換到主線程handler.post(new Runnable() {@Overridepublic void run() {ioKhttpUtilsCallback.onFailure(e.getMessage());}});}}@Overridepublic 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() {@Overridepublic void run() {ioKhttpUtilsCallback.onResponse(json);}});}} else {if (ioKhttpUtilsCallback != null) {//切換到主線程handler.post(new Runnable() {@Overridepublic void run() {ioKhttpUtilsCallback.onFailure("網(wǎng)絡(luò)異常");}});}}}});}//接口回調(diào)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);}@Overrideprotected void initModel() {loginModel = new LoginModel();}public void getLogin(String moblie, String pwd) {loginModel.getLogin(moblie, pwd, new LoginModel.IMainModelCallback2() {@Overridepublic void getSuccess(LoginBean loginBean) {if (view != null) {view.LoginSuccess(loginBean);}}@Overridepublic 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);}@Overrideprotected void initModel() {newsModel = new NewsModel();}public void getNews(Integer page) {newsModel.getNews(page, new NewsModel.IMainModelCallback() {@Overridepublic void getSuccess(NewsBean newsBean) {if (view != null) {view.onSuccess(newsBean);}}@Overridepublic 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;}@Overridepublic 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);}@Overridepublic 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() {@Overridepublic void onClick(View v) {onItemClickListener.OnItemClick(v, position);}});//長(zhǎng)按((MyViewHolder01) holder).imageView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic 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() {@Overridepublic void onClick(View v) {onItemClickListener.OnItemClick(v, position);}});((MyViewHolder02) holder).imageView2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {onItemClickListener.OnItemClick(v, position);}});((MyViewHolder02) holder).imageView3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {onItemClickListener.OnItemClick(v, position);}});holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {onItemLongClickListener.OnItemLongClick(v, position);return true;}});}}@Overridepublic int getItemViewType(int position) {if (position % 2 == 0) {return viewType01;} else {return viewType02;}}@Overridepublic 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;@Overrideprotected 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();@Overrideprotected 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;@Overrideprotected 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);}@Overridepublic 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;}}@Overridepublic 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);//點(diǎn)擊圖片改變 透明adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {@Overridepublic 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() {@Overridepublic void OnItemLongClick(View view, final int position) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("數(shù)據(jù)");builder.setMessage("確定刪除嗎");builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {list.remove(position);adapter.notifyDataSetChanged();}});builder.setNegativeButton("取消", null);builder.show();}});}@Overridepublic void LoginSuccess(LoginBean loginBean) {}@Overridepublic void onFaild(String error) {}@Overridepublic Context context() {return this;} }NewsActivity
public class ScendActivity extends AppCompatActivity implements View.OnClickListener, DataCall {/*** 請(qǐng)輸入用戶名...*/private EditText mEdName;/*** 請(qǐng)輸入密碼...*/private EditText mEdPwd;/*** 登錄登錄*/private Button mBtnLogin;private LoginPresenter presenter;private String moblie;@Overrideprotected 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);}@Overridepublic 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;}}@Overridepublic void onSuccess(NewsBean newBean) {}@Overridepublic 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);}@Overridepublic void onFaild(String error) {Toast.makeText(ScendActivity.this, "666666666666" , Toast.LENGTH_SHORT).show();}@Overridepublic Context context() {return this;} }總結(jié)
以上是生活随笔為你收集整理的MVP实现Recy多条目展示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 访问局域网电脑,使用pyt
- 下一篇: MTK6577+Android GPIO