无论在做什么项目的时候第一步都要首先导入依赖及权限
在列出代码前,当然是先秀一波图啦:
那个购物车的逻辑代码也就不写了,如果不会的话,可以参考我的这篇博客:android 购物车二级列表实现
然后就是订单了,我用的网络请求使用okhttp的get请求方式:
废话就不多说了,直接上代码吧:
MainActivity:
public class OrdersActivity extends AppCompatActivity { private TabLayout mTab; private ViewPager mPager; //类型 private String[] mTitles = {"全部", "待支付", "已支付", "已取消"}; private List<Fragment> fragmentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_orders); initView(); initData(); } private void initData() { getFragment(); mPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList != null ? fragmentList.size() : 0; } @Override public CharSequence getPageTitle(int position) { return mTitles[position]; } }); mTab.setTabMode(TabLayout.MODE_FIXED); mTab.setupWithViewPager(mPager); } private void getFragment() { Fragment_all fragment_all = new Fragment_all(); Fragment_wei fragment_wei = new Fragment_wei(); Fragment_fa fragment_fa = new Fragment_fa(); Fragment_cancel fragment_cancel = new Fragment_cancel(); fragmentList = new ArrayList<>(); fragmentList.add(fragment_all); fragmentList.add(fragment_wei); fragmentList.add(fragment_fa); fragmentList.add(fragment_cancel); } private void initView() { mTab = (TabLayout) findViewById(R.id.orders_tab); mPager = (ViewPager) findViewById(R.id.orders_pager); } }
activity_main:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.studyme.activity.OrdersActivity"> <android.support.design.widget.TabLayout android:id="@+id/orders_tab" android:layout_width="match_parent" android:layout_height="40dp"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/orders_pager" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> </LinearLayout>
各个Fragment:
LazyFragment:
public abstract class LazyFragment extends Fragment { protected boolean isVisible; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { isVisible = true; onVisible(); } else { isVisible = false; } } private void onVisible() { LazyLoad(); } protected abstract void LazyLoad(); }Fragment_all:
public class Fragment_all extends LazyFragment implements OrdersView { private boolean hasVisible = false; private OrderPresenter orderPresenter; private View view; private RecyclerView mLv; private MyAllAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = LayoutInflater.from(getContext()).inflate(R.layout.fragment_all, container, false); hasVisible = true; initView(); LazyLoad(); return view; } private void initView() { mLv = view.findViewById(R.id.all_lv); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { LazyLoad(); } } @Override protected void LazyLoad() { if (!isVisible || !hasVisible) { return; } orderPresenter = new OrderPresenter(this); orderPresenter.getOrders("2825", 3); } @Override public void onGetOrdersSuccess(OrdersBean ordersBean) { List<OrdersBean.DataBean> data = ordersBean.getData(); adapter = new MyAllAdapter(data, getContext()); mLv.setLayoutManager(new LinearLayoutManager(getContext())); adapter.setOnStatusListener(new MyAllAdapter.onStatusListener() { @Override public void onChangeStatus() { orderPresenter.getOrders("2825", 3); } }); adapter.notifyDataSetChanged(); mLv.setAdapter(adapter); } @Override public void onGetOrdersFailed(IOException e) { Toast.makeText(getContext(), "获取数据失败", Toast.LENGTH_SHORT).show(); Log.e("TAG", e.getMessage().toString()); } //MVP解绑 @Override public void onDetach() { super.onDetach(); if (orderPresenter != null) { orderPresenter.detach(); adapter.onDetach(); } } }
Fragment_wei:
public class Fragment_wei extends LazyFragment implements OrdersView { private boolean hasVisible = false; private OrderPresenter orderPresenter; private View view; private RecyclerView mLv; private MyAllAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = LayoutInflater.from(getContext()).inflate(R.layout.fragment_wei, container, false); hasVisible = true; initView(); LazyLoad(); return view; } private void initView() { mLv = view.findViewById(R.id.wei_lv); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { LazyLoad(); } } @Override protected void LazyLoad() { if (!isVisible || !hasVisible) { return; } orderPresenter = new OrderPresenter(this); orderPresenter.getOrders("2825", 3); } @Override public void onGetOrdersSuccess(OrdersBean ordersBean) { List<OrdersBean.DataBean> data = ordersBean.getData(); List<OrdersBean.DataBean> list = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { if (data.get(i).getStatus().equals("0")) { list.add(data.get(i)); } } adapter = new MyAllAdapter(list, getContext()); mLv.setLayoutManager(new LinearLayoutManager(getContext())); adapter.setOnStatusListener(new MyAllAdapter.onStatusListener() { @Override public void onChangeStatus() { orderPresenter.getOrders("2825", 3); } }); adapter.notifyDataSetChanged(); mLv.setAdapter(adapter); } @Override public void onGetOrdersFailed(IOException e) { Toast.makeText(getContext(), "获取数据失败", Toast.LENGTH_SHORT).show(); Log.e("TAG", e.getMessage().toString()); } //MVP解绑 @Override public void onDetach() { super.onDetach(); if (orderPresenter != null) { orderPresenter.detach(); adapter.onDetach(); } } }Fragment_fa:
public class Fragment_fa extends LazyFragment implements OrdersView { private boolean hasVisible = false; private OrderPresenter orderPresenter; private View view; private RecyclerView mLv; private MyAllAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = LayoutInflater.from(getContext()).inflate(R.layout.fragment_fa, container, false); hasVisible = true; initView(); LazyLoad(); return view; } private void initView() { mLv = view.findViewById(R.id.fa_lv); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { LazyLoad(); } } @Override protected void LazyLoad() { if (!isVisible || !hasVisible) { return; } orderPresenter = new OrderPresenter(this); orderPresenter.getOrders("2825", 3); } @Override public void onGetOrdersSuccess(OrdersBean ordersBean) { List<OrdersBean.DataBean> data = ordersBean.getData(); List<OrdersBean.DataBean> list = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { if (data.get(i).getStatus().equals("1")) { list.add(data.get(i)); } } adapter = new MyAllAdapter(list, getContext()); mLv.setLayoutManager(new LinearLayoutManager(getContext())); adapter.setOnStatusListener(new MyAllAdapter.onStatusListener() { @Override public void onChangeStatus() { orderPresenter.getOrders("2825", 3); } }); adapter.notifyDataSetChanged(); mLv.setAdapter(adapter); } @Override public void onGetOrdersFailed(IOException e) { Toast.makeText(getContext(), "获取数据失败", Toast.LENGTH_SHORT).show(); Log.e("TAG", e.getMessage().toString()); } //MVP解绑 @Override public void onDetach() { super.onDetach(); if (orderPresenter != null) { orderPresenter.detach(); adapter.onDetach(); } } }
Fragment_cancel:
public class Fragment_cancel extends LazyFragment implements OrdersView { private boolean hasVisible = false; private OrderPresenter orderPresenter; private View view; private RecyclerView mLv; private MyAllAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = LayoutInflater.from(getContext()).inflate(R.layout.fragment_cancel, container, false); hasVisible = true; initView(); LazyLoad(); return view; } private void initView() { mLv = view.findViewById(R.id.cancel_lv); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { LazyLoad(); } } @Override protected void LazyLoad() { if (!isVisible || !hasVisible) { return; } orderPresenter = new OrderPresenter(this); orderPresenter.getOrders("2825", 3); } @Override public void onGetOrdersSuccess(OrdersBean ordersBean) { List<OrdersBean.DataBean> data = ordersBean.getData(); List<OrdersBean.DataBean> list = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { if (data.get(i).getStatus().equals("2")) { list.add(data.get(i)); } } adapter = new MyAllAdapter(list, getContext()); mLv.setLayoutManager(new LinearLayoutManager(getContext())); adapter.setOnStatusListener(new MyAllAdapter.onStatusListener() { @Override public void onChangeStatus() { orderPresenter.getOrders("2825", 3); } }); adapter.notifyDataSetChanged(); mLv.setAdapter(adapter); } @Override public void onGetOrdersFailed(IOException e) { Toast.makeText(getContext(), "获取数据失败", Toast.LENGTH_SHORT).show(); Log.e("TAG", e.getMessage().toString()); } //MVP解绑 @Override public void onDetach() { super.onDetach(); if (orderPresenter != null) { orderPresenter.detach(); adapter.onDetach(); } } }
每一个Fragment中的布局都是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/mintcream" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/cancel_lv" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </LinearLayout>
既然采用了RecyclerView布局,那肯定是有一个是属于他的适配器了:
public class MyAllAdapter extends RecyclerView.Adapter<MyAllAdapter.MyAllHolder> implements UpdateOrdersView { private List<OrdersBean.DataBean> list; private Context context; private final UpdateOrdersPresenter updateOrdersPresenter; private onStatusListener mListener; public void setOnStatusListener(onStatusListener mListener) { this.mListener = mListener; } public MyAllAdapter(List<OrdersBean.DataBean> list, Context context) { this.list = list; this.context = context; updateOrdersPresenter = new UpdateOrdersPresenter(this); } @Override public MyAllHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.orders_all_layout, parent, false); MyAllHolder holder = new MyAllHolder(view); return holder; } @Override public void onBindViewHolder(final MyAllHolder holder, final int position) { holder.mTitle.setText(list.get(position).getTitle()); holder.mPrice.setText("价格:¥" + list.get(position).getPrice()); holder.mCreateTime.setText("创建时间:" + list.get(position).getCreatetime()); if (list.get(position).getStatus().equals("0")) { holder.mStatus.setText("待支付"); holder.mStatus.setTextColor(Color.RED); holder.mBt.setText("取消订单"); holder.mBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("提示"); builder.setMessage("确定取消订单吗?"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { updateOrdersPresenter.updateOrders(list.get(position).getUid(), "2", list.get(position).getOrderid()); dialog.dismiss(); } }); builder.setNegativeButton("取消", null); builder.show(); } }); } else if (list.get(position).getStatus().equals("1")) { holder.mStatus.setText("已支付"); holder.mStatus.setTextColor(Color.BLACK); holder.mBt.setText("查看订单"); holder.mBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "查看订单", Toast.LENGTH_SHORT).show(); } }); } else if (list.get(position).getStatus().equals("2")) { holder.mStatus.setText("已取消"); holder.mStatus.setTextColor(Color.BLACK); holder.mBt.setText("查看订单"); holder.mBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "查看订单", Toast.LENGTH_SHORT).show(); } }); } } @Override public int getItemCount() { return list != null ? list.size() : 0; } public interface onStatusListener { void onChangeStatus(); } @Override public void onUpdateSuccess(UpdateOrderBean updateOrderBean) { if (updateOrderBean.getCode().equals("0")) { if (mListener != null) { mListener.onChangeStatus(); } } } @Override public void onUpdateFailed(IOException e) { Toast.makeText(context, "修改失败", Toast.LENGTH_SHORT).show(); Log.e("TAG", e.getMessage().toString()); } class MyAllHolder extends RecyclerView.ViewHolder { private final Button mBt; private final TextView mCreateTime; private final TextView mPrice; private final TextView mStatus; private final TextView mTitle; public MyAllHolder(View itemView) { super(itemView); mTitle = itemView.findViewById(R.id.all_title); mStatus = itemView.findViewById(R.id.all_status); mPrice = itemView.findViewById(R.id.all_price); mCreateTime = itemView.findViewById(R.id.all_createTime); mBt = itemView.findViewById(R.id.all_bt); } } public void onDetach() { if (updateOrdersPresenter != null) { updateOrdersPresenter.detach(); } } }
他的子布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="#fff" android:orientation="vertical" android:padding="10dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/all_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="订单测试列表标题" android:textColor="@color/black" android:textSize="18sp" /> <TextView android:id="@+id/all_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="待支付" android:textColor="@color/red" android:textSize="18sp" /> </RelativeLayout> <TextView android:id="@+id/all_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="价格:¥99.99" android:textColor="@color/red" android:textSize="18sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:id="@+id/all_createTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="创建时间:2017-08-21" android:textSize="18sp" /> <Button android:id="@+id/all_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/mbt_shape" android:text="取消订单" /> </RelativeLayout> </LinearLayout>