Android 购物车之订单(二)

本文探讨了在Android应用中实现购物车订单的详细过程,重点介绍了MyDD.java和activity_my_dd.xml的RelativeLayout布局。内容包括MyddInfo.java Bean的创建,使用LinearLayout布局以及myDD_recycler.xml和mydd_recy_item.xml的适配器设置,以展示订单信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyDD.java 和 activity_my_dd.xml

采用RelativeLayout布局

其中

Constans.DD="https://www.zhaoapi.cn/product/getOrders"

    <android.support.design.widget.TabLayout
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:id="@+id/mdd_tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:layout_above="@id/mydd_return"
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/mdd_tab"/>
    
    <Button
        android:id="@+id/mydd_return"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/red"
        android:text="返回"
        android:textColor="#FFFFFF" />

public class MyDD extends AppCompatActivity implements IMyDD,TabFrag.TabAgain,TabFrag.PageAdd {

    private IParesenter iParesenter;
    private int page = 1;
    private Button mydd_return;
    private String uid;
    private String[] tabs = {"待支付","已支付","已取消"};
    private TabLayout mdd_tab;
    private FragmentManager manager;
    private List<Fragment> fragments;
    private ViewPager vp;
    private TabFrag fragmentForVp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //透明状态栏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
        getSupportActionBar().hide();
        setContentView(R.layout.activity_my_dd);

        manager = getSupportFragmentManager();

        mydd_return = findViewById(R.id.mydd_return);
        mdd_tab = findViewById(R.id.mdd_tab);
        vp = findViewById(R.id.vp);

        fragments = new ArrayList<Fragment>();


        iParesenter = new IMyDDParesenter(this);
        SharedPreferences log = getSharedPreferences("LOG", Activity.MODE_PRIVATE);
        uid = log.getString("uid", "");

        if (uid.equals("")){
            Toast.makeText(this, "您还没有登录,先去登录吧", Toast.LENGTH_SHORT).show();
        }else{
            iParesenter.getJson(Constans.DD + "?uid=" + uid + "&page=" + page);
        }

        mydd_return.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MyDD.this,JD.class);
                startActivity(intent);
                finish();
            }
        });

    }


    @Override
    public void getMyDDSuccess(MyddInfo myddInfo) {

        fragments = null;
        fragments = new ArrayList<Fragment>();
        mdd_tab.removeAllTabs();
        MyVpAdapter myVpAdapter = new MyVpAdapter(manager);
        vp.setAdapter(myVpAdapter);
        if (myddInfo.getData().size() == 0 && (page == 1)){
            Toast.makeText(this, "您先还还没有订单,先去购物车创建订单吧", Toast.LENGTH_SHORT).show();
            return;
        }else if (myddInfo.getData().size() == 0 && (page != 1)){
            Toast.makeText(this, "已经到最后一页了,没有更多订单了", Toast.LENGTH_SHORT).show();
            page = 1;
            iParesenter.destroy();
            iParesenter = new IMyDDParesenter(this);
            iParesenter.getJson(Constans.DD + "?uid=" + uid + "&page=" + page);
            return;
        }

        //给tablayout设置tab页
        for(int i = 0;i < tabs.length;i ++){
            fragmentForVp = new TabFrag();
            fragmentForVp.setMyddInfo(myddInfo);
            Bundle b = new Bundle();
            b.putString("data",tabs[i]);

            fragmentForVp.setTabAgain(this);
            fragmentForVp.setArguments(b);
            fragmentForVp.setPageAdd(this);
            fragments.add(fragmentForVp);
            mdd_tab.addTab(mdd_tab.newTab().setText(tabs[i]));
        }


        myVpAdapter.notifyDataSetChanged();
        mdd_tab.setupWithViewPager(vp);

    }

    @Override
    public void getMyDDFailed(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        iParesenter.destroy();
    }


    @Override
    public void getTabAgain() {
        iParesenter.destroy();
        iParesenter = new IMyDDParesenter(this);
        iParesenter.getJson(Constans.DD + "?uid=" + uid + "&page=" + page);
    }

    @Override
    public void pageAdd() {
        page ++;
        iParesenter.destroy();
        iParesenter = new IMyDDParesenter(this);
        iParesenter.getJson(Constans.DD + "?uid=" + uid + "&page=" + page);
    }

    @Override
    public void pageDel() {
        Toast.makeText(this, "page:" + page, Toast.LENGTH_SHORT).show();

        page = 1;
        iParesenter.destroy();
        iParesenter = new IMyDDParesenter(this);
        iParesenter.getJson(Constans.DD + "?uid=" + uid + "&page=" + page);
    }


    class MyVpAdapter extends FragmentStatePagerAdapter {

        public MyVpAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return tabs[position];
        }

        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
    }
}


所用的其他java

MyddInfo.java(Bean)

public class MyddInfo {
    private String msg;
    private String code;
    private String page;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * createtime : 2017-10-19T20:28:43
         * orderid : 20
         * price : 100.0
         * status : 2
         * title : 订单标题测试3
         * uid : 71
         */
        private String createtime;
        private int orderid;
        private double price;
        private int status;
        private String title;
        private int uid;

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public int getOrderid() {
            return orderid;
        }

        public void setOrderid(int orderid) {
            this.orderid = orderid;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public int getStatus() {
            return status;
        }

        public void setStatus(int status) {
            this.status = status;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public int getUid() {
            return uid;
        }

        public void setUid(int uid) {
            this.uid = uid;
        }
    }
}

mdd_recycle.xml

LinearLayout布局

 <android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/swip">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/myDD_recycler"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="20dp">
        </android.support.v7.widget.RecyclerView>
    </android.support.v4.widget.SwipeRefreshLayout>

接口 IUpStatus
public interface IUpStatus {
    void upSuccess(String result);
    void upFailed(String msg);
}


接口 IParesenter
public interface IParesenter {
    void getJson(String path);
    void getJsonSuccess(String result);
    void getJsonFailed(String msg);
    void destroy();
}

UpUser

public class UpUser {
    /**
     * msg : 昵称修改成功
     * code : 0
     */
    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}


IMoudle

public interface IMoudle {

    void getJson(String path, IParesenter iParesenter);

}


OkUntil

public class OkUntil {
    private static OkUntil okUntil = null;
    private Handler handler = new Handler();
    private OkUntil() {
    }

    /**
     * 得到OkHttpUtils实例对象
     * @return
     */
    public static OkUntil getInstance(){

        if(null == okUntil){

            synchronized (OkUntil.class){

                if(null == okUntil){
                    okUntil = new OkUntil();
                }
            }

        }
        return okUntil;

    }


    /**
     * Get请求
     * @param path
     * @param onFinishListener
     */
    public void doGet(String path, final OnFinishListener onFinishListener){

        //Http:/www.baidu.com?key=ddd&

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new CommonParamsInterceptor())
                .build();

        //构建请求项
        Request request = new Request.Builder()
                .get()
                .url(path)
                .build();
        Call call = okHttpClient.newCall(request);
        //execute 子线程  enqueue //
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                //请求失败
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onFinishListener.onFailed(e.getMessage());

                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                //得到服务器的响应结果
                final String result = response.body().string();

                //请求成功
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //主线程当中执行

                        onFinishListener.onSuccess(result);

                    }
                });

            }
        });

    }
}

OnFinishListener
public interface OnFinishListener {
    void onFailed(String msg);
    void onSuccess(String result);
}

OkMoudle

public class OkMoudle implements IMoudle,OnFinishListener {

    private IParesenter iParesenter;

    @Override
    public void getJson(String path, IParesenter iParesenter) {
        this.iParesenter = iParesenter;
        OkUntil okUntil = OkUntil.getInstance();//通过单例模式获取一个OK请求对象
        okUntil.doGet(path,this);//通过get方法获取请求数据
    }

    @Override
    public void onFailed(String msg) {
        iParesenter.getJsonFailed(msg);
    }

    @Override
    public void onSuccess(String result) {
        iParesenter.getJsonSuccess(result);
    }
}

UpStatusParesenter
public class UpStatusParesenter implements IParesenter {

    private IMoudle iMoudle;
    private IUpStatus iUpStatus;

    public UpStatusParesenter(IUpStatus iUpStatus) {
        iMoudle = new OkMoudle();
        this.iUpStatus = iUpStatus;
    }

    @Override
    public void getJson(String path) {
        iMoudle.getJson(path,this);
    }

    @Override
    public void getJsonSuccess(String result) {
        Gson gson = new Gson();
        UpUser upUser = gson.fromJson(result, UpUser.class);
        if (upUser.getCode().equals("0")){
            iUpStatus.upSuccess(upUser.getMsg());
        }else {
            iUpStatus.upFailed(upUser.getMsg());
        }
    }

    @Override
    public void getJsonFailed(String msg) {
        iUpStatus.upFailed(msg);
    }

    @Override
    public void destroy() {

        if (iUpStatus != null){
            iUpStatus = null;
        }

    }
}

DdRecyclerAdapter
public class DdRecyclerAdapter extends RecyclerView.Adapter<DdRecyclerAdapter.ViewHolder> implements IUpStatus {

    private Context context;
    private List<MyddInfo.DataBean> data;
    private String uid;

    public DdRecyclerAdapter(Context context, List<MyddInfo.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.mydd_recy_item, parent, false);
        ViewHolder holder = new ViewHolder(inflate);
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {

        if (data.get(position).getStatus() == 0) {
            holder.mdd_item_status.setText("订单状态:未支付");
        } else if (data.get(position).getStatus() == 1) {
            holder.mdd_item_status.setText("订单状态:已支付");
        } else {
            holder.mdd_item_status.setText("订单状态:已取消");
        }

        final IParesenter iParesenter = new UpStatusParesenter(this);

        holder.mydd_item_title.setText(data.get(position).getTitle());
        holder.mydd_item_price.setText("订单总价:" + data.get(position).getPrice());
        holder.mdd_item_ddId.setText("订单号:" + data.get(position).getOrderid() + "");
        holder.mydd_item_creatTime.setText("创建时间:" + data.get(position).getCreatetime());
        final int orderid = data.get(position).getOrderid();
        final SharedPreferences log = context.getSharedPreferences("LOG", Activity.MODE_PRIVATE);

        holder.mdd_item_esc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final String uid = log.getString("uid", "");
                final String token = log.getString("token", "");
                iParesenter.getJson("https://www.zhaoapi.cn/product/updateOrder?uid=" + uid + "&token=" + token + "&status=" + 2 + "&orderId=" + orderid);

            }
        });

        holder.mdd_item_pay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                uid = log.getString("uid", "");
                final String token = log.getString("token", "");
                iParesenter.getJson( "https://www.zhaoapi.cn/product/updateOrder?uid=" + uid + "&token=" + token + "&status=" + 1 + "&orderId=" + orderid);
                notifyDataSetChanged();

            }
        });
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    @Override
    public void upSuccess(String result) {
        Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
        getDDAgain.getAgain();
    }

    GetDDAgain getDDAgain;

    public void setGetDDAgain(TabFrag tabFrag) {
        getDDAgain = tabFrag;
    }

    public interface GetDDAgain {
        void getAgain();
    }

    @Override
    public void upFailed(String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        private final TextView mydd_item_price;
        private final TextView mydd_item_title;
        private final TextView mdd_item_pay;
        private final TextView mdd_item_ddId;
        private final TextView mdd_item_status;
        private final TextView mydd_item_creatTime;
        private final TextView mdd_item_esc;

        public ViewHolder(View itemView) {
            super(itemView);
            mydd_item_price = itemView.findViewById(R.id.mydd_item_price);
            mydd_item_title = itemView.findViewById(R.id.mydd_item_title);
            mdd_item_pay = itemView.findViewById(R.id.mdd_item_pay);
            mdd_item_ddId = itemView.findViewById(R.id.mdd_item_ddId);
            mdd_item_status = itemView.findViewById(R.id.mdd_item_status);
            mydd_item_creatTime = itemView.findViewById(R.id.mydd_item_creatTime);
            mdd_item_esc = itemView.findViewById(R.id.mdd_item_esc);

        }
    }

}

TabFrag

public class TabFrag extends Fragment implements DdRecyclerAdapter.GetDDAgain {
    private MyddInfo myddInfo;
    private RecyclerView myDD_recycler;
    private DdRecyclerAdapter adapter;
    private LinearLayoutManager linearLayoutManager;
    private SwipeRefreshLayout swip;

    public void setMyddInfo(MyddInfo myddInfo) {
        this.myddInfo = myddInfo;
        int status = myddInfo.getData().get(0).getStatus();
        System.out.println("状态" + status);
    }

    @SuppressLint("InflateParams")
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View inflate = LayoutInflater.from(getActivity()).inflate(R.layout.mdd_recycle, null);
        myDD_recycler = inflate.findViewById(R.id.myDD_recycler);
        swip = inflate.findViewById(R.id.swip);
        return inflate;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        String data = getArguments().getString("data");
        List<MyddInfo.DataBean> data1 = myddInfo.getData();
        List<MyddInfo.DataBean> data_0 = new ArrayList<MyddInfo.DataBean>();

        for (int i = 0;i< data1.size(); i++){
            if (data.equals("待支付")){

                if (data1.get(i).getStatus() == 0){
                    data_0.add(data1.get(i));
                }
            }else if (data.equals("已支付")){
                if (data1.get(i).getStatus() == 1){
                    data_0.add(data1.get(i));
                }
            }else if (data.equals("已取消")){
                if (data1.get(i).getStatus() == 2){
                    data_0.add(data1.get(i));
                }
            }
        }
        adapter = new DdRecyclerAdapter(getActivity(),data_0);
        adapter.setGetDDAgain(this);
        linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayout.VERTICAL, false);
        myDD_recycler.setItemAnimator(new DefaultItemAnimator());
        myDD_recycler.setLayoutManager(linearLayoutManager);
        myDD_recycler.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.HORIZONTAL));
        myDD_recycler.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        myDD_recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {

            private int lastVisibleItemPosition;

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                switch (newState){
                    case RecyclerView.SCROLL_STATE_IDLE:
                        if(adapter.getItemCount() - 1 == lastVisibleItemPosition ){
                            if (adapter.getItemCount() >= 3){
                                pageAdd.pageAdd();
                            }
                        }
                        break;
                }
            }
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
            }
        });

        swip.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                pageAdd.pageDel();
            }
        });

    }

    private PageAdd pageAdd;

    public void setPageAdd(PageAdd pageAdd){
        this.pageAdd = pageAdd;
    }

    public void setTabAgain(MyDD myDD) {
        this.tabAgain = myDD;
    }

    public interface PageAdd{
        void pageAdd();
        void pageDel();
    }

    @Override
    public void getAgain() {
        tabAgain.getTabAgain();
    }

    TabAgain tabAgain;

    public interface TabAgain{
        void getTabAgain();
    }
}

myDD_recycler.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/swip">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/myDD_recycler"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="20dp">
        </android.support.v7.widget.RecyclerView>
    </android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>


IMyDD
public interface IMyDD {

    void getMyDDSuccess(MyddInfo myddInfo);
    void getMyDDFailed(String msg);

}

mydd_recy_item.xml

  <TextView
        android:id="@+id/mydd_item_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="title"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/mydd_item_creatTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建时间为:2018.1.1" />

    <TextView
        android:id="@+id/mdd_item_ddId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="订单号" />

    <TextView
        android:id="@+id/mydd_item_price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="price"
        android:textColor="#DA7568"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/mdd_item_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="订单状态" />

    <TextView
        android:layout_marginTop="10dp"
        android:textColor="@color/red"
        android:text="点击进行支付"
        android:id="@+id/mdd_item_pay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_marginTop="10dp"
        android:textColor="@color/red"
        android:text="点击取消订单"
        android:id="@+id/mdd_item_esc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

IMyDDParesenter.java


public class IMyDDParesenter implements IParesenter {

    private IMyDD iMyDD;
    private OkMoudle okMoudle;

    public IMyDDParesenter(IMyDD iMyDD) {
        this.iMyDD = iMyDD;
        okMoudle = new OkMoudle();
    }

    @Override
    public void getJson(String path) {
        okMoudle.getJson(path,this);
    }

    @Override
    public void getJsonSuccess(String result) {
        if (result == "null"){
            return;
        }
        Gson gson = new Gson();
        MyddInfo myddInfo = gson.fromJson(result, MyddInfo.class);
        if (myddInfo ==  null){
            iMyDD.getMyDDFailed("没有数据了");
        }
        if (myddInfo.getCode().equals("0")){
            iMyDD.getMyDDSuccess(myddInfo);
        }else {
            iMyDD.getMyDDFailed(myddInfo.getMsg());
        }

    }

    @Override
    public void getJsonFailed(String msg) {
        iMyDD.getMyDDFailed("连接服务器失败");
    }

    @Override
    public void destroy() {
        if (iMyDD != null){
            iMyDD = null;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值