日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MVP实现Recy多条目展示

發(fā)布時間:2023/12/16 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVP实现Recy多条目展示 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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("請求數(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("請求數(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);}});//長按((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);//點擊圖片改變 透明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 {/*** 請輸入用戶名...*/private EditText mEdName;/*** 請輸入密碼...*/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多条目展示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。