兩種mvp配合使用

1  面向holder編程的mvp ,適用與view裏面多個適配器(adapter,複雜的頁面)
  1. package com.dplustours.b2c.View.adapter;
  2. /**
  3. * Created by zhq_zhao on 2017/4/5.
  4. * 面向holder編程思想的父類抽取
  5. */
  6. import android.view.View;
  7. public abstract class BaseHolder<T> {
  8. public View holderView;//注意:一開始就將convertView轉移到holder中用一個變量表示
  9. public BaseHolder(){
  10. //1.初始化holderView
  11. holderView = initHolderView();//需要holderView
  12. //2.設置tag
  13. holderView.setTag(this);
  14. }
  15. /**
  16. * 初始化holderView
  17. * @return
  18. */
  19. public abstract View initHolderView();
  20. /**
  21. * 綁定數據
  22. */
  23. public abstract void bindData(T data);
  24. /**
  25. * 獲取holderView
  26. * @return
  27. */
  28. public View getHolderView(){
  29. return holderView;
  30. }
  31. }
  1. package com.dplustours.b2c.View.adapter;
  2. /**
  3. * Created by zhq_zhao on 2017/4/6.
  4. */
  5. import android.support.v4.view.PagerAdapter;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import java.util.ArrayList;
  9. public class BasePagerAdapter<T> extends PagerAdapter {
  10. protected ArrayList<T> list;
  11. public BasePagerAdapter(ArrayList<T> list) {
  12. super();
  13. this.list = list;
  14. }
  15. @Override
  16. public int getCount() {
  17. return list.size();
  18. }
  19. @Override
  20. public boolean isViewFromObject(View view, Object object) {
  21. return view==object;
  22. }
  23. @Override
  24. public void destroyItem(ViewGroup container, int position, Object object) {
  25. container.removeView((View) object);
  26. }
  27. }
  1. package com.dplustours.b2c.View.adapter;
  2. import android.view.View;
  3. import android.view.ViewGroup;
  4. import android.widget.BaseAdapter;
  5. import java.util.ArrayList;
  6. /**
  7. * Created by zhq_zhao on 2017/4/5.
  8. * listview的adapter的超級父類
  9. */
  10. public abstract class BasicAdapter<T> extends BaseAdapter {
  11. protected ArrayList<T> list;
  12. public BasicAdapter(ArrayList<T> list) {
  13. super();
  14. this.list = list;
  15. }
  16. @Override
  17. public int getCount() {
  18. return list.size();
  19. }
  20. @Override
  21. public Object getItem(int position) {
  22. return list.get(position);
  23. }
  24. @Override
  25. public long getItemId(int position) {
  26. return position;
  27. }
  28. @Override
  29. public View getView(int position, View convertView, ViewGroup parent) {
  30. // 1.初始化holder
  31. BaseHolder<T> holder = null;
  32. if (convertView == null) {
  33. holder = getHolder(position);//需要一個不固定的holder
  34. } else {
  35. holder = (BaseHolder) convertView.getTag();
  36. }
  37. // 3.綁定數據
  38. holder.bindData(list.get(position));
  39. return holder.getHolderView();
  40. }
  41. protected abstract BaseHolder<T> getHolder(int positon);
  42. }
  1. package com.dplustours.b2c.View.activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.util.Log;
  5. import android.view.View;
  6. import android.widget.LinearLayout;
  7. import android.widget.ScrollView;
  8. import com.dplustours.b2c.R;
  9. import com.dplustours.b2c.Utils.ACache;
  10. import com.dplustours.b2c.Utils.GsonUtils;
  11. import com.dplustours.b2c.Utils.NetGlobalParams;
  12. import com.dplustours.b2c.Utils.NetUtils;
  13. import com.dplustours.b2c.Utils.safe.MD5Coder;
  14. import com.dplustours.b2c.View.adapter.CapsiteViewpagerInHolder;
  15. import com.dplustours.b2c.View.adapter.CapteCarInfoHolder;
  16. import com.dplustours.b2c.View.adapter.CapteLocationHolder;
  17. import com.dplustours.b2c.View.adapter.CapteMultInfoHolder;
  18. import com.dplustours.b2c.View.adapter.CapteOrderHolder;
  19. import com.dplustours.b2c.View.adapter.CaptePolicyHolder;
  20. import com.dplustours.b2c.View.application.MyApplication;
  21. import com.dplustours.b2c.View.application.UIHelper;
  22. import com.dplustours.b2c.View.view.ProgressDialog;
  23. import com.dplustours.b2c.bean.BedIdBeanInfos;
  24. import com.dplustours.b2c.bean.CapteInfosInitBean;
  25. import com.dplustours.b2c.bean.eventbusbean.CapteCeaseActivityBean;
  26. import com.dplustours.b2c.bean.eventbusbean.CapteOrderHlderTimeInfoBean;
  27. import com.dplustours.b2c.bean.eventbusbean.EventBusUtils;
  28. import com.nineoldandroids.view.ViewHelper;
  29. import com.nineoldandroids.view.ViewPropertyAnimator;
  30. import com.zhy.http.okhttp.callback.StringCallback;
  31. import org.greenrobot.eventbus.EventBus;
  32. import org.greenrobot.eventbus.Subscribe;
  33. import org.greenrobot.eventbus.ThreadMode;
  34. import java.io.UnsupportedEncodingException;
  35. import java.net.URLEncoder;
  36. import java.util.Map;
  37. import java.util.TreeMap;
  38. import okhttp3.Call;
  39. /**
  40. * Created by zhq_zhao on 2017/4/7.
  41. */
  42. public class CampsiteOrderActivity extends BaseActivity implements View.OnClickListener {
  43. private String name;
  44. private LinearLayout holder_container;
  45. private CapsiteViewpagerInHolder capsiteViewpagerInHolder;
  46. private CapteLocationHolder capteLocationHolder;
  47. private CapteMultInfoHolder capteMultInfoHolder;
  48. private CapteOrderHolder capteOrderHolder;
  49. private CapteCarInfoHolder capteCarInfoHolder;
  50. private View view;
  51. private ScrollView scrollview;
  52. private CaptePolicyHolder captePolicyHolder;
  53. private ProgressDialog mProgressDialog;
  54. private CapteCeaseActivityBean mevent;
  55. private int aultCount = 1;
  56. private int childCount = 0;
  57. private String text1;
  58. private String text2;
  59. private String text3;
  60. private int homeCount = 1;
  61. private CapteOrderHlderTimeInfoBean mCapteOrderHlderTimeInfoBean;
  62. private LinearLayout ll_all;
  63. private Bundle bundle;
  64. @Override
  65. protected View getSuccessView() {
  66. if (view == null) {
  67. view = View.inflate(MyApplication.context, R.layout.activity_campsite, null);
  68. scrollview = (ScrollView) view.findViewById(R.id.scrollview);
  69. ll_all = (LinearLayout) view.findViewById(R.id.ll_all);
  70. //不加這個每次進去的時候scrollview默認不是在最頂部,scroview的y軸和android中的y軸相反,正的是上移動
  71. scrollview.smoothScrollTo(0, 20);
  72. }
  73. holder_container = (LinearLayout) view.findViewById(R.id.holder_container);
  74. scrollview = (ScrollView) view.findViewById(R.id.scrollview);
  75. //1.初始化營地預訂數據模塊
  76. capsiteViewpagerInHolder = new CapsiteViewpagerInHolder();
  77. holder_container.addView(capsiteViewpagerInHolder.getHolderView());//佈局是活的,是動態添加的不是寫死的
  78. //2 初始化營地預訂定位數據模塊
  79. capteLocationHolder = new CapteLocationHolder();
  80. capteLocationHolder.setAttachActivity(CampsiteOrderActivity.this);
  81. holder_container.addView(capteLocationHolder.getHolderView());//佈局是活的,是動態添加的不是寫死的
  82. //3初始化營地預訂多項選擇服務類型模塊
  83. capteMultInfoHolder = new CapteMultInfoHolder();
  84. capteMultInfoHolder.setAttachActivity(CampsiteOrderActivity.this);
  85. holder_container.addView(capteMultInfoHolder.getHolderView());
  86. //4 初始化營地預訂入住和離開模塊
  87. capteOrderHolder = new CapteOrderHolder();
  88. capteOrderHolder.setActivity(CampsiteOrderActivity.this);
  89. holder_container.addView(capteOrderHolder.getHolderView());
  90. //5 初始化營地預訂營地車信息
  91. capteCarInfoHolder = new CapteCarInfoHolder();
  92. capteCarInfoHolder.AtachActivity(CampsiteOrderActivity.this);
  93. holder_container.addView(capteCarInfoHolder.getHolderView());
  94. //6初始化營地政策
  95. captePolicyHolder = new CaptePolicyHolder();
  96. captePolicyHolder.attachActivity(this);
  97. holder_container.addView(captePolicyHolder.getHolderView());
  98. return view;
  99. }
  100. @Override
  101. protected String setHeadStyleTitle() {
  102. return "營地預訂";
  103. }
  104. @Override
  105. protected void requestData() {
  106. EventBus.getDefault().register(this);//註冊eventbus事件
  107. ////2.3.5.1 初始化營地信息
  108. CacheBedId();
  109. // //2 這裏更新UI
  110. // runOnUiThread(new Runnable() {
  111. // @Override
  112. // public void run() {
  113. // UpdateUI();
  114. //
  115. // }
  116. // });
  117. }
  118. /**
  119. * 緩存牀型id
  120. */
  121. public void CacheBedId() {
  122. if (null == mProgressDialog) {
  123. mProgressDialog = new ProgressDialog(CampsiteOrderActivity.this);
  124. }
  125. mProgressDialog.show();
  126. Map map = new TreeMap();
  127. map.put(GsonUtils.snTime, String.valueOf(System.currentTimeMillis()));
  128. Map<String, String> resultMap = GsonUtils.sortMapByKey(map); // 按Key進行排序
  129. String sn = GsonUtils.buildSN(resultMap);
  130. try {
  131. sn = URLEncoder.encode(sn, "UTF-8");
  132. sn = MD5Coder.getMD5Code(sn);
  133. } catch (UnsupportedEncodingException e1) {
  134. e1.printStackTrace();
  135. }
  136. map.put(GsonUtils.sn, sn);
  137. String json = GsonUtils.buildJson(map);
  138. try {
  139. NetUtils.getmInstance().postJsons(NetGlobalParams.GETBEDID, json, new StringCallback() {
  140. @Override
  141. public void onError(Call call, Exception e, int id) {
  142. UIHelper.ToastMessage(MyApplication.context, "網絡連接超時");
  143. mProgressDialog.dismiss();
  144. }
  145. @Override
  146. public void onResponse(String response, int id) {
  147. Log.i("response", "onResponse: " + response);
  148. mProgressDialog.dismiss();
  149. //將json轉化爲對象
  150. try {
  151. BedIdBeanInfos mBedIdBeanInfos = GsonUtils.GsonToBean(response, BedIdBeanInfos.class);
  152. if (mBedIdBeanInfos != null) {
  153. if (mBedIdBeanInfos.getStatus() == 0) {//請求成功
  154. for (int i = 0; i < mBedIdBeanInfos.getDetail().size(); i++) {
  155. String bedId = mBedIdBeanInfos.getDetail().get(i).getBedId();
  156. String bedName = mBedIdBeanInfos.getDetail().get(i).getName();
  157. ACache aCache = ACache.getmInstance();
  158. //使用之前先清楚掉以前的緩存
  159. aCache.clean(bedId);
  160. aCache.addMemoryCache(bedId, bedName);
  161. }
  162. initDataOfCaption();
  163. }
  164. }
  165. } catch (Exception e) {
  166. UIHelper.ToastMessage(MyApplication.context, "數據格式錯誤,請檢查網絡");
  167. mProgressDialog.dismiss();
  168. }
  169. }
  170. });
  171. } catch (Exception e) {
  172. e.printStackTrace();
  173. }
  174. }
  175. private void initDataOfCaption() {
  176. Map map = new TreeMap();
  177. map.put(GsonUtils.snTime, String.valueOf(System.currentTimeMillis()));
  178. Map<String, String> resultMap = GsonUtils.sortMapByKey(map); // 按Key進行排序
  179. String sn = GsonUtils.buildSN(resultMap);
  180. try {
  181. sn = URLEncoder.encode(sn, "UTF-8");
  182. sn = MD5Coder.getMD5Code(sn);
  183. } catch (UnsupportedEncodingException e1) {
  184. e1.printStackTrace();
  185. }
  186. map.put(GsonUtils.sn, sn);
  187. String json = GsonUtils.buildJson(map);
  188. try {
  189. NetUtils.getmInstance().postJsons(NetGlobalParams.CAPTIONINIT, json, new StringCallback() {
  190. @Override
  191. public void onError(Call call, Exception e, int id) {
  192. UIHelper.ToastMessage(CampsiteOrderActivity.this,"網絡連接超時");
  193. mProgressDialog.dismiss();
  194. }
  195. @Override
  196. public void onResponse(String response, int id) {
  197. mProgressDialog.dismiss();
  198. //將json轉化爲對象
  199. try {
  200. CapteInfosInitBean mCapteInfosInitBean = GsonUtils.GsonToBean(response, CapteInfosInitBean.class);
  201. if (mCapteInfosInitBean != null) {
  202. if (mCapteInfosInitBean.getStatus() == 0) {//請求成功
  203. //1.初始化營地預訂數據模塊數據
  204. capsiteViewpagerInHolder.bindData(mCapteInfosInitBean);
  205. capsiteViewpagerInHolder.setAttachActivity(CampsiteOrderActivity.this);
  206. //2 初始化營地預訂定位數據模塊數據
  207. capteLocationHolder.bindData(mCapteInfosInitBean);
  208. //綁定酒店信息
  209. capteOrderHolder.bindData(null);
  210. //5 初始化營地預訂營地車信息
  211. capteCarInfoHolder.bindData(mCapteInfosInitBean);
  212. name = mCapteInfosInitBean.getDetail().getName();
  213. ll_all.setVisibility(View.GONE);
  214. Log.i("response", "onResponse: " + response);
  215. }
  216. }
  217. }catch (Exception e){
  218. UIHelper.ToastMessage(CampsiteOrderActivity.this,"數據格式錯誤,請檢查網絡");
  219. mProgressDialog.dismiss();
  220. }
  221. }
  222. });
  223. } catch (Exception e) {
  224. e.printStackTrace();
  225. }
  226. }
  227. /**
  228. * 請求回來的網路數據更新UI界面
  229. */
  230. private void UpdateUI() {
  231. //0 剛開始讓整個移動到最右邊然後進行顯示的動畫效果
  232. //一開始讓整個View移動到左邊
  233. view.measure(0, 0);//保證能測量到
  234. ViewHelper.setTranslationX(view, view.getMeasuredWidth());
  235. ViewPropertyAnimator.animate(view)
  236. .translationXBy(-view.getMeasuredWidth())
  237. //.setInterpolator(new OvershootInterpolator())
  238. .setDuration(1000)
  239. .start();
  240. // //1.初始化營地預訂viewpager數據模塊數據
  241. // capsiteViewpagerInHolder.bindData(null);
  242. // //2 初始化營地預訂定位數據模塊數據
  243. // capteLocationHolder.bindData(null);
  244. //// //3初始化營地預訂多項選擇服務類型模塊
  245. capteMultInfoHolder.bindData(null);
  246. // //4 初始化營地預訂入住和離開模塊
  247. // capteOrderHolder.bindData(null);
  248. // //5 初始化營地預訂營地車信息
  249. // capteCarInfoHolder.bindData(null);
  250. // //6初始化營地政策
  251. // captePolicyHolder.bindData(null);
  252. }
  253. /**
  254. * eventbus傳遞參數
  255. *
  256. * @param eventBusUtils
  257. */
  258. @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
  259. public void showEventbus(EventBusUtils eventBusUtils) {
  260. if (eventBusUtils instanceof CapteCeaseActivityBean) { //成人兒童預訂信息
  261. mevent = (CapteCeaseActivityBean) eventBusUtils;
  262. Map valuesMap = mevent.ValuesMap();
  263. aultCount = (int) valuesMap.get("aultCount");
  264. childCount = (int) valuesMap.get("childCount");
  265. homeCount = (int) valuesMap.get("homeCount");
  266. text1 = (String) valuesMap.get("text1");
  267. text2 = (String) valuesMap.get("text2");
  268. text3 = (String) valuesMap.get("text3");
  269. capteOrderHolder.setRightInfo(aultCount, childCount, homeCount, text1, text2, text3);
  270. }
  271. }
  272. @Override
  273. public void onClick(View v) {
  274. switch (v.getId()) {
  275. // case R.id.btn_headtitle_leftback:
  276. // onBackPressed();
  277. // break;
  278. // case R.id. lv_listview:
  279. // break;
  280. default:
  281. break;
  282. }
  283. }
  284. @Override
  285. protected void onResume() {
  286. super.onResume();
  287. //綁定酒店信息
  288. capteOrderHolder.bindData(null);
  289. }
  290. @Override
  291. protected void onDestroy() {
  292. super.onDestroy();
  293. if (mevent != null) {
  294. EventBus.getDefault().removeStickyEvent(mevent);
  295. } else if (mCapteOrderHlderTimeInfoBean != null) {
  296. EventBus.getDefault().removeStickyEvent(mCapteOrderHlderTimeInfoBean);
  297. }
  298. }
  299. public String CaravanId, Breakfirst, BedName, Bed ;
  300. public void SetBreakfirst(String Breakfirst) {
  301. this.Breakfirst = Breakfirst;
  302. }
  303. public void SetCaravanId(String CaravanId) {
  304. this.CaravanId = CaravanId;
  305. }
  306. public void SetBedName(String BedName) {
  307. this.BedName = BedName;
  308. }
  309. public void SetBed(String Bed) {
  310. this.Bed = Bed;
  311. }
  312. public void SetName(String name) {
  313. this.name = name;
  314. }
  315. @Override
  316. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  317. if (requestCode == 1508 && resultCode == 0x101) {
  318. // ToastUtils.getToast(this, "****").show();
  319. if (!MyApplication.getInstance().getPreferencesUtils().getUserid().equals("")) {
  320. //跳轉到房間詳情頁面
  321. if (bundle == null) {
  322. bundle = new Bundle();
  323. }
  324. bundle.putString("CaravanId", "" +CaravanId);
  325. if (Bed != null) {
  326. bundle.putString("miaoshu", Breakfirst + BedName + "會員價");
  327. } else {
  328. bundle.putString("miaoshu",Breakfirst + "會員價");
  329. }
  330. bundle.putString("Name",name);
  331. UIHelper.Go(this, CapteHomeDetailsInfoActivity.class, bundle);
  332. }
  333. }
  334. super.onActivityResult(requestCode, resultCode, data);
  335. }
  336. }
  1. package com.dplustours.b2c.View.adapter;
  2. import android.view.View;
  3. import android.widget.AdapterView;
  4. import android.widget.ImageView;
  5. import android.widget.LinearLayout;
  6. import android.widget.TextView;
  7. import com.dplustours.b2c.R;
  8. import com.dplustours.b2c.View.activity.CampsiteOrderActivity;
  9. import com.dplustours.b2c.View.application.MyApplication;
  10. import com.dplustours.b2c.View.application.UIHelper;
  11. import com.dplustours.b2c.View.view.MyListView;
  12. import com.dplustours.b2c.bean.CapteInfosInitBean;
  13. import java.util.ArrayList;
  14. /**
  15. * Created by zhq_zhao on 2017/4/10.
  16. */
  17. public class CapteCarInfoHolder extends BaseHolder<CapteInfosInitBean> {
  18. private MyListView caption_car_info;
  19. private CarListAdapter carListAdapter;
  20. private TextView tv_caption_more;
  21. private CapteInfosInitBean info;
  22. private ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean> caravanTypes;
  23. private LinearLayout ll_more;
  24. private int lastVisiblePosition;
  25. private ImageView iv_up_and_low;
  26. @Override
  27. public View initHolderView() {
  28. View view = View.inflate(MyApplication.context, R.layout.layout_caption_carinfo, null);
  29. caption_car_info = (MyListView) view.findViewById(R.id.caption_car_info);
  30. ll_more = (LinearLayout) view.findViewById(R.id.ll_more);
  31. iv_up_and_low = (ImageView) view.findViewById(R.id.iv_up_and_low);
  32. tv_caption_more = (TextView) view.findViewById(R.id.tv_caption_more);
  33. return view;
  34. }
  35. @Override
  36. public void bindData(final CapteInfosInitBean data) {
  37. if (data != null) {
  38. this.info = data;
  39. //網上請求數據
  40. caravanTypes = (ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean>) info.getDetail().getCaravanTypes();
  41. //在設置適配器之前我們只讓listview顯示三條數據
  42. carListAdapter = new CarListAdapter(caravanTypes,campsiteOrderActivity, data.getDetail().getName());
  43. if(caravanTypes.size()<=3){
  44. ll_more.setVisibility(View.GONE);
  45. carListAdapter.count = caravanTypes.size();
  46. }else{
  47. ll_more.setVisibility(View.VISIBLE);
  48. carListAdapter.count = 3;
  49. }
  50. carListAdapter.setAtachActivity(campsiteOrderActivity);
  51. caption_car_info.setAdapter(carListAdapter);
  52. //一開始讓listview只顯示我們指定的item條數
  53. ll_more.setOnClickListener(new View.OnClickListener() {
  54. @Override
  55. public void onClick(View v) {
  56. if (tv_caption_more.getText().toString().equals("查看全部")) {
  57. carListAdapter.count = caravanTypes.size();
  58. tv_caption_more.setText("收起");
  59. iv_up_and_low.setImageResource(R.drawable.up);
  60. carListAdapter.notifyDataSetChanged();
  61. lastVisiblePosition= caption_car_info.getLastVisiblePosition();
  62. } else {
  63. carListAdapter.count = 3;
  64. tv_caption_more.setText("查看全部");
  65. iv_up_and_low.setImageResource(R.drawable.low);
  66. carListAdapter.notifyDataSetChanged();
  67. lastVisiblePosition= caption_car_info.getLastVisiblePosition();
  68. }
  69. }
  70. });
  71. //設置item的點擊事件隱藏和顯示
  72. caption_car_info.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  73. @Override
  74. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  75. carListAdapter.changeImageVisable(view, position);
  76. carListAdapter.setMtextHome(data.getDetail().getCaravanTypes().get(position).getName());
  77. }
  78. });
  79. }
  80. }
  81. private CampsiteOrderActivity campsiteOrderActivity;
  82. public void AtachActivity(CampsiteOrderActivity campsiteOrderActivity) {
  83. this.campsiteOrderActivity=campsiteOrderActivity;
  84. }
  85. }
  1. package com.dplustours.b2c.View.adapter;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.text.Html;
  6. import android.text.TextPaint;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.BaseAdapter;
  11. import android.widget.ImageView;
  12. import android.widget.LinearLayout;
  13. import android.widget.TextView;
  14. import com.bumptech.glide.Glide;
  15. import com.bumptech.glide.load.resource.bitmap.CenterCrop;
  16. import com.dplustours.b2c.R;
  17. import com.dplustours.b2c.Utils.ACache;
  18. import com.dplustours.b2c.View.activity.CampsiteOrderActivity;
  19. import com.dplustours.b2c.View.activity.CapteDetailsActionsActivity;
  20. import com.dplustours.b2c.View.activity.CapteHomeDetailsInfoActivity;
  21. import com.dplustours.b2c.View.activity.LoginActivity;
  22. import com.dplustours.b2c.View.activity.ScaleTypeImageViewActivity;
  23. import com.dplustours.b2c.View.application.MyApplication;
  24. import com.dplustours.b2c.View.application.UIHelper;
  25. import com.dplustours.b2c.View.view.GlideRoundTransform;
  26. import com.dplustours.b2c.View.view.MyListView;
  27. import com.dplustours.b2c.bean.CapteInfosInitBean;
  28. import com.dplustours.b2c.bean.eventbusbean.CarListAdapterBean;
  29. import org.greenrobot.eventbus.EventBus;
  30. import java.util.ArrayList;
  31. import java.util.List;
  32. import java.util.Map;
  33. /**
  34. * Created by zhq_zhao on 2017/4/10.
  35. */
  36. public class CarListAdapter extends BaseAdapter {
  37. private ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean> arrayList;
  38. private View mLastView;
  39. private int mLastPosition;
  40. private int mLastVisibility;
  41. public int count;
  42. private Holder holder;
  43. private Bundle bundle;
  44. private CapteListInfos mCapteListInfos;
  45. private TextView tv_1;
  46. private TextView tv_descri;
  47. private ImageView iv_1;
  48. private TextView tv_price;
  49. private ImageView iv_login;
  50. private LinearLayout ll_tv_1;
  51. private List<CapteInfosInitBean.DetailBean.CaravanTypesBean.CaravansBean> caravans;
  52. private int ivpostion;
  53. private TextView text_no_yuding;
  54. private ArrayList isMemberOnlyArrayList = new ArrayList();
  55. private List<CapteInfosInitBean.DetailBean.CaravanTypesBean.PicturesBean> pictures;
  56. private CampsiteOrderActivity mactivity;
  57. private String name;
  58. private String textHomename;
  59. private final ACache aCache;
  60. public CarListAdapter(ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean> caravanTypes, CampsiteOrderActivity campsiteOrderActivity, String name) {
  61. this.arrayList = caravanTypes;
  62. mLastPosition = -1;
  63. this.mactivity = campsiteOrderActivity;
  64. this.name = name;
  65. aCache = ACache.getmInstance();
  66. }
  67. @Override
  68. public int getCount() {
  69. return count;
  70. }
  71. @Override
  72. public Object getItem(int position) {
  73. return arrayList.get(position);
  74. }
  75. @Override
  76. public long getItemId(int position) {
  77. return position;
  78. }
  79. @Override
  80. public View getView(final int position, View convertView, ViewGroup parent) {
  81. // android:text="¥100"
  82. holder = null;
  83. if (convertView == null) {
  84. convertView = View.inflate(MyApplication.context, R.layout.layout_caption_car_info, null);
  85. holder = new Holder();
  86. holder.iv_car_info = (ImageView) convertView.findViewById(R.id.iv_car_info);
  87. holder.tv_car1 = (TextView) convertView.findViewById(R.id.tv_car1);
  88. holder.tv_car2 = (TextView) convertView.findViewById(R.id.tv_car2);
  89. holder.iv_isMember = (ImageView) convertView.findViewById(R.id.iv_isMember);
  90. holder.tv_price = (TextView) convertView.findViewById(R.id.tv_price);
  91. holder.tv_price = (TextView) convertView.findViewById(R.id.tv_price);
  92. holder.ml_list_cars = (MyListView) convertView.findViewById(R.id.ml_list_cars);
  93. holder.ll_contain = (LinearLayout) convertView.findViewById(R.id.ll_contain);
  94. convertView.setTag(holder);
  95. convertView.setTag(R.id.iv_car_info, holder);
  96. } else {
  97. holder = (Holder) convertView.getTag();
  98. holder = (Holder) convertView.getTag(R.id.iv_car_info);
  99. }
  100. holder.iv_car_info.setOnClickListener(new View.OnClickListener() {
  101. @Override
  102. public void onClick(View v) {
  103. //跳轉到縮略圖進行操作
  104. UIHelper.GoFlag(MyApplication.context, ScaleTypeImageViewActivity.class);
  105. EventBus.getDefault().postSticky(new CarListAdapterBean() {
  106. @Override
  107. public Map ValuesMap() {
  108. return null;
  109. }
  110. @Override
  111. public String ValuesString() {
  112. return null;
  113. }
  114. @Override
  115. public ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean.PicturesBean> ValuesArrayList() {
  116. pictures = arrayList.get(position).getPictures();
  117. return (ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean.PicturesBean>) pictures;
  118. }
  119. @Override
  120. public Object ValuesObject() {
  121. return null;
  122. }
  123. });
  124. }
  125. });
  126. //只有在圖片資源不能爲空的情況下才可以點擊進行縮放
  127. //默認肯定不相等
  128. if (mLastPosition == position) {
  129. holder.ml_list_cars.setVisibility(mLastVisibility);
  130. } else {//首先就是隱藏,執行這個代碼
  131. holder.ml_list_cars.setVisibility(View.GONE);
  132. }
  133. //這裏設置數據
  134. isMemberOnlyArrayList.clear();
  135. for (int i = 0; i <= arrayList.get(position).getCaravans().size() - 1; i++) {
  136. int isMemberOnly = arrayList.get(position).getCaravans().get(i).getIsMemberOnly();
  137. isMemberOnlyArrayList.add(isMemberOnly);
  138. if (isMemberOnlyArrayList.contains(1)) {
  139. holder.iv_isMember.setVisibility(View.VISIBLE);
  140. } else if (!isMemberOnlyArrayList.contains(1)) {
  141. holder.iv_isMember.setVisibility(View.GONE);
  142. }
  143. }
  144. holder.tv_car1.setText(arrayList.get(position).getName());
  145. if (arrayList.get(position).getBed() != null) {
  146. holder.tv_car2.setText(aCache.getStringInfos(arrayList.get(position).getBed()) + " " + arrayList.get(position).getArea());
  147. } else {
  148. holder.tv_car2.setText(arrayList.get(position).getArea());
  149. }
  150. String str = "<font color='#E58A84'> " + arrayList.get(position).getLowestPrice() + "</font>";
  151. TextPaint tp = holder.tv_price.getPaint();
  152. tp.setFakeBoldText(true);
  153. holder.tv_price.setText(Html.fromHtml(str));
  154. caravans = arrayList.get(position).getCaravans();
  155. mCapteListInfos = new CapteListInfos((ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean.CaravansBean>) caravans);
  156. holder.ml_list_cars.setAdapter(mCapteListInfos);
  157. // NetUtils.getmInstance().showImageViewXUtils(holder.iv_car_info, arrayList.get(position).getPictures().get(0).getPictureUrl(), R.drawable.loadingpicture, R.drawable.loadingpicture);
  158. if (arrayList.get(position).getPictures().size() >= 1) {
  159. String pictureUrl = arrayList.get(position).getPictures().get(0).getPictureUrl();
  160. if (pictureUrl != null) {
  161. Log.i("position", "getView: " + position);
  162. Glide.with(MyApplication.context).load(pictureUrl).transform(new CenterCrop(MyApplication.context), new GlideRoundTransform(MyApplication.context, 5)).into(holder.iv_car_info);
  163. //這裏解決postion複用錯亂的現象
  164. }
  165. }
  166. return convertView;
  167. }
  168. private Activity campsiteOrderActivity;
  169. public void setAtachActivity(Activity campsiteOrderActivity) {
  170. this.campsiteOrderActivity = campsiteOrderActivity;
  171. }
  172. public void setMtextHome(String name) {
  173. this.textHomename=name;
  174. }
  175. public class CapteListInfos extends BasicAdapter {
  176. public CapteListInfos(ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean.CaravansBean> list) {
  177. super(list);
  178. }
  179. @Override
  180. protected BaseHolder getHolder(int positon) {
  181. BaseHolder holder = null;
  182. holder = new CapteInfosHolder(positon);
  183. return holder;
  184. }
  185. }
  186. public class CapteInfosHolder extends BaseHolder<CapteInfosInitBean.DetailBean.CaravanTypesBean.CaravansBean> {
  187. private int positon;
  188. public CapteInfosHolder(int positon) {
  189. this.positon = positon;
  190. }
  191. @Override
  192. public View initHolderView() {
  193. View view = View.inflate(MyApplication.context, R.layout.capte_list_xiala, null);
  194. tv_1 = (TextView) view.findViewById(R.id.tv_1);
  195. tv_descri = (TextView) view.findViewById(R.id.tv_descri);
  196. text_no_yuding = (TextView) view.findViewById(R.id.text_no_yuding);
  197. iv_1 = (ImageView) view.findViewById(R.id.iv_1);
  198. ll_tv_1 = (LinearLayout) view.findViewById(R.id.ll_tv_1);
  199. tv_price = (TextView) view.findViewById(R.id.tv_price);
  200. iv_login = (ImageView) view.findViewById(R.id.iv_login);
  201. return view;
  202. }
  203. @Override
  204. public void bindData(final CapteInfosInitBean.DetailBean.CaravanTypesBean.CaravansBean data) {
  205. if (data != null) {
  206. tv_1.setText(data.getName().toString());
  207. String brakfirst = data.getBreakfirst().toString();
  208. String bed = data.getBed();
  209. if (bed != null) {
  210. tv_descri.setText(brakfirst + " " + aCache.getStringInfos(bed));
  211. } else {
  212. tv_descri.setText(brakfirst);
  213. }
  214. if (!MyApplication.getInstance().getPreferencesUtils().getUserid().equals("")) {
  215. if (data.getIsMemberOnly() == 1) {
  216. iv_1.setVisibility(View.VISIBLE);
  217. if(data.getIsReservation()==1){//可以預訂
  218. iv_login.setVisibility(View.VISIBLE);
  219. text_no_yuding.setVisibility(View.GONE);
  220. iv_login.setEnabled(true);
  221. text_no_yuding.setEnabled(false);
  222. }else if(data.getIsReservation()==0){//不可以預訂
  223. iv_login.setVisibility(View.GONE);
  224. text_no_yuding.setVisibility(View.VISIBLE);
  225. iv_login.setEnabled(false);
  226. text_no_yuding.setEnabled(false);
  227. }
  228. tv_price.setText("¥" + data.getSpecialPrice().toString());
  229. } else if (data.getIsMemberOnly() == 0) {
  230. iv_1.setVisibility(View.GONE);
  231. if(data.getIsReservation()==1){//可以預訂
  232. iv_login.setVisibility(View.VISIBLE);
  233. text_no_yuding.setVisibility(View.GONE);
  234. text_no_yuding.setEnabled(false);
  235. iv_login.setEnabled(true);
  236. }else if(data.getIsReservation()==0){//不可以預訂
  237. iv_login.setVisibility(View.GONE);
  238. text_no_yuding.setVisibility(View.VISIBLE);
  239. text_no_yuding.setEnabled(false);
  240. iv_login.setEnabled(false);
  241. }
  242. tv_price.setText("¥" + data.getPrice().toString());
  243. }
  244. } else {
  245. if (data.getIsMemberOnly() == 1) {
  246. iv_1.setVisibility(View.VISIBLE);
  247. if(data.getIsReservation()==1){//可以預訂
  248. iv_login.setVisibility(View.VISIBLE);
  249. text_no_yuding.setVisibility(View.GONE);
  250. iv_login.setEnabled(true);
  251. text_no_yuding.setEnabled(false);
  252. }else if(data.getIsReservation()==0){//不可以預訂
  253. iv_login.setVisibility(View.GONE);
  254. text_no_yuding.setVisibility(View.VISIBLE);
  255. iv_login.setEnabled(false);
  256. text_no_yuding.setEnabled(false);
  257. }
  258. tv_price.setText("¥" + data.getSpecialPrice().toString());
  259. } else if (data.getIsMemberOnly() == 0) {
  260. iv_1.setVisibility(View.GONE);
  261. if(data.getIsReservation()==1){//可以預訂
  262. text_no_yuding.setVisibility(View.GONE);
  263. text_no_yuding.setEnabled(false);
  264. iv_login.setEnabled(true);
  265. iv_login.setVisibility(View.VISIBLE);
  266. }else if(data.getIsReservation()==0){//不可以預訂
  267. text_no_yuding.setVisibility(View.VISIBLE);
  268. text_no_yuding.setEnabled(false);
  269. iv_login.setEnabled(false);
  270. iv_login.setVisibility(View.GONE);
  271. }
  272. tv_price.setText("¥" + data.getPrice().toString());
  273. }
  274. }
  275. }
  276. iv_login.setOnClickListener(new View.OnClickListener() {
  277. @Override
  278. public void onClick(View v) {
  279. Log.i("View", "onClick: " + positon);
  280. Log.i("View", "onClick: " + data.getCaravanId());
  281. if (data.getIsMemberOnly() == 1) {//會員價格
  282. if (!MyApplication.getInstance().getPreferencesUtils().getUserid().equals("")) {
  283. iv_login.setEnabled(true);
  284. //跳轉到房間詳情頁面
  285. if (bundle == null) {
  286. bundle = new Bundle();
  287. }
  288. bundle.putString("CaravanId", "" + data.getCaravanId());
  289. bundle.putString("Name", name);
  290. UIHelper.Go(mactivity, CapteHomeDetailsInfoActivity.class, bundle);
  291. } else {
  292. mactivity.SetCaravanId("" + data.getCaravanId());
  293. mactivity.SetBreakfirst("" + data.getBreakfirst().toString());
  294. mactivity.SetBedName("" + aCache.getStringInfos(data.getBed()));
  295. mactivity.SetBed("" + data.getBed());
  296. mactivity.SetName(name);
  297. Intent intent = new Intent(mactivity, LoginActivity.class);
  298. mactivity.startActivityForResult(intent, 1508);
  299. }
  300. } else {//不是會員 直接跳轉,如果登錄了就不能預訂了
  301. //需要把房車編號傳遞給房間詳情頁
  302. //跳轉到房間詳情頁面
  303. if (!MyApplication.getInstance().getPreferencesUtils().getUserid().equals("")) {
  304. iv_login.setEnabled(false);
  305. } else {
  306. iv_login.setEnabled(true);
  307. if (bundle == null) {
  308. bundle = new Bundle();
  309. }
  310. bundle.putString("Name", name);
  311. bundle.putString("CaravanId", "" + data.getCaravanId());
  312. UIHelper.GoFlag(MyApplication.context, CapteHomeDetailsInfoActivity.class, bundle);
  313. }
  314. }
  315. }
  316. });
  317. ll_tv_1.setOnClickListener(new View.OnClickListener() {
  318. @Override
  319. public void onClick(View v) {
  320. Log.i("View", "onClick: " + positon);
  321. Log.i("View", "onClick: " + data.getCaravanId());
  322. //跳轉到房車詳情頁面
  323. if (bundle == null) {
  324. bundle = new Bundle();
  325. }
  326. bundle.putString("carvanid", "" + data.getCaravanId());
  327. bundle.putString("homeText", "" +textHomename );
  328. bundle.putString("mhomeText", "" + data.getName());
  329. UIHelper.Go(campsiteOrderActivity, CapteDetailsActionsActivity.class, bundle);
  330. }
  331. });
  332. }
  333. }
  334. /**
  335. * 顯示隱藏item下面的條目
  336. *
  337. * @param view
  338. * @param position
  339. */
  340. public void changeImageVisable(View view, int position) {
  341. // holder.ml_list_cars. getParent().requestDisallowInterceptTouchEvent(false);//請求父控件不要攔截事件
  342. if (mLastView != null && mLastPosition != position) {
  343. Holder holder = (Holder) mLastView.getTag();
  344. switch (holder.ml_list_cars.getVisibility()) {
  345. case View.VISIBLE:
  346. holder.ml_list_cars.setVisibility(View.GONE);
  347. mLastVisibility = View.GONE;
  348. break;
  349. default:
  350. break;
  351. }
  352. }
  353. mLastPosition = position;
  354. mLastView = view;
  355. Holder holder = (Holder) view.getTag();
  356. switch (holder.ml_list_cars.getVisibility()) {
  357. case View.GONE:
  358. holder.ml_list_cars.setVisibility(View.VISIBLE);
  359. mLastVisibility = View.VISIBLE;
  360. break;
  361. case View.VISIBLE:
  362. holder.ml_list_cars.setVisibility(View.GONE);
  363. mLastVisibility = View.GONE;
  364. break;
  365. }
  366. }
  367. class Holder {
  368. TextView tv_car1;
  369. TextView tv_price;
  370. TextView tv_car2;
  371. MyListView ml_list_cars;
  372. ImageView iv_car_info;
  373. private LinearLayout ll_contain;
  374. ImageView iv_isMember;
  375. }
  376. }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:focusable="true"
  6. android:focusableInTouchMode="true"
  7. android:orientation="vertical">
  8. <LinearLayout
  9. android:orientation="vertical"
  10. android:id="@+id/ll_all"
  11. android:layout_width="match_parent"
  12. android:layout_height="match_parent"
  13. android:background="@color/white"
  14. ></LinearLayout>
  15. <com.dplustours.b2c.View.view.InnerScrollView
  16. android:id="@+id/scrollview"
  17. android:layout_width="match_parent"
  18. android:layout_height="0dp"
  19. android:layout_weight="1">
  20. <LinearLayout
  21. android:id="@+id/holder_container"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content"
  24. android:background="@color/login_line"
  25. android:orientation="vertical">
  26. <!-- app info -->
  27. <!-- <include layout="@layout/layout_detail_app_info"/> -->
  28. </LinearLayout>
  29. </com.dplustours.b2c.View.view.InnerScrollView>
  30. <!--<FrameLayout-->
  31. <!--android:id="@+id/fl_buttonbotom"-->
  32. <!--android:layout_width="match_parent"-->
  33. <!--android:layout_height="55dp"></FrameLayout>-->
  34. </LinearLayout>

2 面向多種接口的MVP,適用與處理業務邏輯並且view裏面適配器不多的情況下(個人中心,登錄,等等)
 
  1. 建立model(處理業務邏輯,這裏指數據讀寫),先寫接口,後寫實現
  2. [java] view plain copy print?
  3. public interface IUserModel {
  4. void setID(int id);
  5. void setFirstName(String firstName);
  6. void setLastName(String lastName);
  7. int getID();
  8. UserBean load(int id);// 通過id讀取user信息,返回一個UserBean
  9. }
  1. 建立view(更新ui中的view狀態),這裏列出需要操作當前view的方法,也是接口
  2. [java] view plain copy print?
  3. public interface IUserView {
  4. int getID();
  5. String getFristName();
  6. String getLastName();
  7. void setFirstName(String firstName);
  8. void setLastName(String lastName);
  9. }
  1. 建立presenter(主導器,通過iViewiModel接口操作modelview),activity可以把所有邏輯給presenter處理,這樣java邏輯就從手機的activity中分離出來。
  2. [java] view plain copy print?
  3. public class UserPresenter {
  4. private IUserView mUserView;
  5. private IUserModel mUserModel;
  6. public UserPresenter(IUserView view) {
  7. mUserView = view;
  8. mUserModel = new UserModel();
  9. }
  10. public void saveUser( int id, String firstName, String lastName) {
  11. mUserModel.setID(id);
  12. mUserModel.setFirstName(firstName);
  13. mUserModel.setLastName(lastName);
  14. }
  15. public void loadUser( int id) {
  16. UserBean user = mUserModel.load(id);
  17. mUserView.setFirstName(user.getFirstName()); // 通過調用IUserView的方法來更新顯示
  18. mUserView.setLastName(user.getLastName());
  19. }
  20. }
  1. activity中實現iview接口,在其中操作view,實例化一個presenter變量。
  2. [java] view plain copy print?
  3. public class MainActivity extends Activity implements OnClickListener,IUserView {
  4. UserPresenter presenter;
  5. EditText id,first,last;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout. activity_main);
  10. findViewById(R.id. save).setOnClickListener( this);
  11. findViewById(R.id. load).setOnClickListener( this);
  12. id = (EditText) findViewById(R.id. id);
  13. first = (EditText) findViewById(R.id. first);
  14. last = (EditText) findViewById(R.id. last);
  15. presenter = new UserPresenter( this);
  16. }
  17. @Override
  18. public void onClick(View v) {
  19. switch (v.getId()) {
  20. case R.id. save:
  21. presenter.saveUser(getID(), getFristName(), getLastName());
  22. break;
  23. case R.id. load:
  24. presenter.loadUser(getID());
  25. break;
  26. default:
  27. break;
  28. }
  29. }
  30. @Override
  31. public int getID() {
  32. return new Integer( id.getText().toString());
  33. }
  34. @Override
  35. public String getFristName() {
  36. return first.getText().toString();
  37. }
  38. @Override
  39. public String getLastName() {
  40. return last.getText().toString();
  41. }
  42. @Override
  43. public void setFirstName(String firstName) {
  44. first.setText(firstName);
  45. }
  46. @Override
  47. public void setLastName(String lastName) {
  48. last.setText(lastName);
  49. }
  50. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章