購物車RecycleView

 private List<SpusBean> spus;
        private boolean isChecked;
         private List<?> status_remind_list;
            private boolean isChildChecked;

MainActivity頁面

package com.example.myliushibuju;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.myliushibuju.adapter.MyAdapter;
import com.example.myliushibuju.adapter.MyChildAdapter;
import com.example.myliushibuju.bean.MyData;
import com.example.myliushibuju.presenter.PresenterImpl;
import com.example.myliushibuju.view.IView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements IView {
    private String mUrl="http://www.wanandroid.com/tools/mockapi/6523/restaurant-list";
    private RecyclerView Recy_Group;
    private RecyclerView Recy_Child;
    private ImageView Recy_Image;
    private TextView Jia_Text;
    private TextView Zong_Text;
    private RelativeLayout Rl;
    private ArrayList<MyData.DataBean> mList=new ArrayList<>();
    private ArrayList<MyData.DataBean.SpusBean> mData=new ArrayList<>();
    private PresenterImpl presenter;
    private MyAdapter myAdapter;
    private MyChildAdapter myChildAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        presenter = new PresenterImpl(this);
        myAdapter = new MyAdapter(mList,this);
        myChildAdapter=new MyChildAdapter(mData,this);
        Recy_Child.setAdapter(myChildAdapter);
        Recy_Group.setAdapter(myAdapter);
        presenter.startRequse(mUrl);
        //設置點擊事件
        myAdapter.setOnItemClick(new MyAdapter.ItemClik() {
            @Override
            public void setItem(View v, int position) {
                mData.clear();
                //給數量置零
                mData.addAll(mList.get(position).getSpus());
                for (int i = 0; i <mData.size() ; i++) {

                    mData.get(i).setPraise_num(0);
                }

                myChildAdapter.notifyDataSetChanged();
                flushBottomLayout();
            }
        });

        myChildAdapter.setCallback(new MyChildAdapter.AdapterCallback() {
            @Override
            public void shuaXin() {
                flushBottomLayout();
            }
        });


    }

    private void initView() {
        Recy_Group = (RecyclerView) findViewById(R.id.Recy_Group);
        Recy_Child = (RecyclerView) findViewById(R.id.Recy_Child);
        Recy_Image = (ImageView) findViewById(R.id.Recy_Image);
        Jia_Text = (TextView) findViewById(R.id.Jia_Text);
        Zong_Text = (TextView) findViewById(R.id.Zong_Text);
        Rl = (RelativeLayout) findViewById(R.id.Rl);

        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
        Recy_Group.setLayoutManager(linearLayoutManager);
        LinearLayoutManager layoutManager=new LinearLayoutManager(this);
        Recy_Child.setLayoutManager(layoutManager);
    }

    @Override
    public void success(Object data) {

        MyData myData= (MyData) data;
        mList.addAll(myData.getData());
        myAdapter.notifyDataSetChanged();
    }

    @Override
    public void error(Object error) {

    }

    private void flushBottomLayout(){

        float allGoodsPrice = myChildAdapter.getAllGoodsPrice();
         Jia_Text.setText("價格:"+allGoodsPrice);
    }


}

適配器Group

package com.example.myliushibuju.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.myliushibuju.R;
import com.example.myliushibuju.bean.MyData;

import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements OnClickListener {

    private ArrayList<MyData.DataBean> mList;
    private Context mContext;

    public MyAdapter(ArrayList<MyData.DataBean> mList, Context mContext) {
        this.mList = mList;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = LayoutInflater.from(mContext).inflate(R.layout.group_item, viewGroup, false);
        ViewHolder holder = new ViewHolder(view);
        view.setOnClickListener(this);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, int i) {

        MyData.DataBean dataBean = mList.get(i);
        viewHolder.group_text.setText(dataBean.getName());
        viewHolder.itemView.setTag(i);
    }

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


    public class ViewHolder extends RecyclerView.ViewHolder {

        private TextView group_text;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            group_text = itemView.findViewById(R.id.Group_Text);
        }
    }

    public interface ItemClik {

        void setItem(View v, int position);
    }

    private ItemClik itemClik;

    public void setOnItemClick(ItemClik itemClick) {
        this.itemClik = itemClick;
    }

    @Override
    public void onClick(View v) {

        itemClik.setItem(v, (Integer) v.getTag());
    }

}

適配器Child

package com.example.myliushibuju.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.example.myliushibuju.MainActivity;
import com.example.myliushibuju.R;
import com.example.myliushibuju.bean.MyData;
import com.example.myliushibuju.weight.JiaJiaView;

import java.util.ArrayList;

public class MyChildAdapter extends RecyclerView.Adapter<MyChildAdapter.ViewHolder> {

    private ArrayList<MyData.DataBean.SpusBean> mData = new ArrayList<>();
    private Context mContext;

    public MyChildAdapter(ArrayList<MyData.DataBean.SpusBean> mData, Context mContext) {
        this.mData = mData;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public MyChildAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = LayoutInflater.from(mContext).inflate(R.layout.child_item, viewGroup, false);
        ViewHolder holder = new ViewHolder(view);
        //view.setOnClickListener(this);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyChildAdapter.ViewHolder viewHolder, final int i) {

        MyData.DataBean.SpusBean spusBean = mData.get(i);
        viewHolder.child_title.setText(spusBean.getName());
        viewHolder.child_price.setText(spusBean.getSkus().get(0).getPrice() + "");
        Glide.with(mContext).load(spusBean.getPic_url()).into(viewHolder.child_image);

        viewHolder.Jia_Jian_View.setNumber(mData.get(i).getPraise_num());
        viewHolder.Jia_Jian_View.setOnChange(new JiaJiaView.OnCountChange() {
            @Override
            public void setCount(int number) {
                mData.get(i).setPraise_num(number);
                adapterCallback.shuaXin();

            }
        });
    }

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


    public class ViewHolder extends RecyclerView.ViewHolder {

        private ImageView child_image;
        private TextView child_price;
        private TextView child_title;
        private JiaJiaView Jia_Jian_View;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            child_image = itemView.findViewById(R.id.Child_Image);
            child_price = itemView.findViewById(R.id.Child_Price);
            child_title = itemView.findViewById(R.id.Child_Title);
            Jia_Jian_View = itemView.findViewById(R.id.Jia_Jian_View);

        }
    }


    public interface AdapterCallback {

        void shuaXin();
    }

    private AdapterCallback adapterCallback;

    public void setCallback(AdapterCallback adapterCallback) {
        this.adapterCallback = adapterCallback;
    }


    public float getAllGoodsPrice() {
        float allPrice = 0;


        for (int i = 0; i < mData.size(); i++) {
            MyData.DataBean.SpusBean spusBean = mData.get(i);
            allPrice += spusBean.getPraise_num() * Float.parseFloat(spusBean.getSkus().get(0).getPrice());
        }

        return allPrice;
    }


}

工具類

package com.example.myliushibuju.utils;

import java.io.IOException;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpUtils {

    private OkHttpClient okHttpClient;
    private OkHttpUtils(){
        okHttpClient=new OkHttpClient();
    }
    public static OkHttpUtils getInstance(){

        return okHttpHolde.utils;

    }

    static class okHttpHolde{

        private static final OkHttpUtils utils=new OkHttpUtils();

    }

    public String get(String url) throws IOException {
        Request request=new Request.Builder().url(url).build() ;

        Response execute = okHttpClient.newCall(request).execute();

        return execute.body().string();
    }


}

自定義View

package com.example.myliushibuju.weight;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.myliushibuju.R;

public class JiaJiaView extends LinearLayout implements View.OnClickListener {


    private TextView mAdd;
    private TextView mDelete;
    private TextView mNumber;
    private int mCount=0;

    public JiaJiaView(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.jiajian_item, this);
        initViews();
    }

    private void initViews() {

        mAdd = findViewById(R.id.add_tv);
        mDelete = findViewById(R.id.delete_tv);
        mNumber = findViewById(R.id.product_number_tv);
        mAdd.setOnClickListener(this);
        mDelete.setOnClickListener(this);

    }

    public void setNumber(int mCount){
        this.mCount=mCount;

        if(mCount==0){
            mDelete.setVisibility(GONE);
            mNumber.setVisibility(GONE);
        }else{
            mNumber.setVisibility(VISIBLE);
            mDelete.setVisibility(VISIBLE);
        }

        mNumber.setText(mCount+"");
    }

    public interface OnCountChange{
        void setCount(int mCount);
    }
    private OnCountChange mOnCountChange;

    public void setOnChange(OnCountChange onCountChange){
        this.mOnCountChange=onCountChange;
    }


    @Override
    public void onClick(View v) {

        switch (v.getId()){
            case R.id.delete_tv:
                if(mCount>0){
                    mCount--;
                    mNumber.setText(mCount+"");
                    if(mOnCountChange!=null){
                        mOnCountChange.setCount(mCount);
                    }if(mCount==0){
                        mDelete.setVisibility(GONE);
                        mNumber.setVisibility(GONE);
                    }
                    }


                break;
            case R.id.add_tv:
                mCount++;
                mNumber.setVisibility(VISIBLE);
                mDelete.setVisibility(VISIBLE);
                mNumber.setText(mCount+"");
                if(mOnCountChange!=null){
                    mOnCountChange.setCount(mCount);
                }
                break;
        }
    }
}

IView

package com.example.myliushibuju.view;

public interface IView<T> {
    void success(T data);
    void error(T error);
}

Model

package com.example.myliushibuju.model;

import com.example.myliushibuju.callback.MyCallBack;

public interface Model {
    void getData(String url, MyCallBack callBack);
}

ModelImpl

package com.example.myliushibuju.model;

import android.os.AsyncTask;

import com.example.myliushibuju.bean.MyData;
import com.example.myliushibuju.callback.MyCallBack;
import com.example.myliushibuju.utils.OkHttpUtils;
import com.google.gson.Gson;

import java.io.IOException;

public class ModelImpl implements Model {

    private MyCallBack callBack;
    @Override
    public void getData(String url, MyCallBack callBack) {
        this.callBack=callBack;
        new MyTask().execute(url);
    }

    class MyTask extends AsyncTask<String,Void,MyData>{

        @Override
        protected MyData doInBackground(String... strings) {
            try {
                String jsonStr = OkHttpUtils.getInstance().get(strings[0]);
                Gson gson=new Gson();
                MyData myData = gson.fromJson(jsonStr, MyData.class);
                return myData;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(MyData myData) {
            super.onPostExecute(myData);
            callBack.setData(myData);
        }
    }

}

MyCallBack

package com.example.myliushibuju.callback;

public interface MyCallBack<T> {
   void setData(T user);
   void setError(T error);
}

Presenter

package com.example.myliushibuju.presenter;

public interface Presenter {

    void startRequse(String url);
}

PresenterImpl

package com.example.myliushibuju.presenter;

import com.example.myliushibuju.callback.MyCallBack;
import com.example.myliushibuju.model.ModelImpl;
import com.example.myliushibuju.view.IView;

public class PresenterImpl implements Presenter {
    private ModelImpl model;
    private IView iView;

    public PresenterImpl(IView iView) {
        this.iView = iView;
        model=new ModelImpl();
    }

    @Override
    public void startRequse(final String url) {

        model.getData(url, new MyCallBack() {
            @Override
            public void setData(Object user) {
                iView.success(user);
            }

            @Override
            public void setError(Object error) {
            iView.error(error);
            }
        });
    }
}

佈局文件

MainActivity佈局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity"
    android:orientation="horizontal"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:id="@+id/Recy_Group"
            ></android.support.v7.widget.RecyclerView>

      <android.support.v7.widget.RecyclerView
          android:layout_width="0dp"
          android:layout_height="match_parent"
          android:layout_weight="4"
          android:id="@+id/Recy_Child"
          ></android.support.v7.widget.RecyclerView>
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:id="@+id/Rl"
        >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"
            android:id="@+id/Recy_Image"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Jia_Text"
            android:text="價格"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Zong_Text"
            android:text="去結算"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            />
    </RelativeLayout>



</RelativeLayout>

Group佈局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/Group_Text"
        android:layout_marginTop="20dp"
        />
</LinearLayout>

Child佈局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    >
    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:id="@+id/Child_Image"
        android:layout_marginLeft="20dp"
        android:src="@mipmap/ic_launcher"
        android:scaleType="centerCrop"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"


        android:orientation="vertical"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Child_Title"
            android:maxLines="2"
            android:text="商品標題"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Child_Price"
            android:text="¥0.0"
            android:layout_marginTop="10dp"
            />
        <com.example.myliushibuju.weight.JiaJiaView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Jia_Jian_View"
            android:layout_gravity="right"
            ></com.example.myliushibuju.weight.JiaJiaView>
    </LinearLayout>




</LinearLayout>

自定義佈局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:orientation="horizontal"

    >

    <TextView
        android:id="@+id/delete_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="-"
        android:textSize="35dp" />

    <TextView
        android:id="@+id/product_number_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:layout_marginLeft="20dp"
        android:text="0" />

       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:textSize="35dp"
           android:layout_marginLeft="20dp"
           android:layout_gravity="center_vertical"
           android:text="+"
           android:id="@+id/add_tv"


           />


</LinearLayout>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章