Android MVP简单实现订单

无论在做什么项目的时候第一步都要首先导入依赖及权限

在列出代码前,当然是先秀一波图啦:

那个购物车的逻辑代码也就不写了,如果不会的话,可以参考我的这篇博客: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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值