主页面 上面recycleview+下 Xrecyclew
package com.example.month;

public class MainActivity extends AppCompatActivity implements View. Listener,IVew{

private RecyclerView grid;
private XRecyclerView xrecycleview;

private String Xurl=\"http://www.wanandroid.com/tools/mockapi/6523/restaurants_offset_0_limit_4\";
private String gurl=\"https://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1\";
private GridAdapter adapter1;
private List<GridBean.ResultsBean>glist=new ArrayList<>();
private List<XrecyBean.DataBean> xlist=new ArrayList<>();
private int i=1;
private IPresenter presenter;
private XrecycleAdapter adapter2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    adapter1 = new GridAdapter(glist,MainActivity.this);
    GridLayoutManager gridLayoutManager=new GridLayoutManager(MainActivity.this,4);
    grid.setLayoutManager(gridLayoutManager);
    grid.setAdapter(adapter1);
    adapter1.set Listener(new GridAdapter.OnItemClick() {
        @Override
        public void onItem(View v, int i) {
            Intent intent=new Intent(MainActivity.this,Main2Activity.class);
            startActivity(intent);

        }
    });
    adapter2 = new XrecycleAdapter(xlist,MainActivity.this);
    adapter2.setOnoClickListener(new XrecycleAdapter.OnoItemClick() {
      @Override
      public void onItemo(View v, int i) {
          Intent intent=new Intent(MainActivity.this,Main3Activity.class);
          startActivity(intent);
          Toast.makeText(MainActivity.this,\"啦啦啦啦\",Toast.LENGTH_LONG).show();
      }
  });
    xrecycleview.setAdapter(adapter2);
     LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
     xrecycleview.setLayoutManager(linearLayoutManager);

    presenter = new IPresenterImpl(this);
    presenter.getData(gurl,\"grid\");
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    presenter.getData(Xurl,\"xrecy\");

}

private void initView() {
    grid = (RecyclerView) findViewById(R.id.grid);
    xrecycleview = (XRecyclerView) findViewById(R.id.xrecycleview);

}

@Override
public void  (View v) {

}

@Override
public void showData(  data) {
    if (i==1){
     i++;
     GridBean gridBean= (GridBean) data;
    glist.addAll(gridBean.getResults());
    adapter1.notifyDataSetChanged();

  }
  else {
        i=1;
        XrecyBean xrecyBean= (XrecyBean) data;
        xlist.addAll(xrecyBean.getData());
       adapter2.notifyDataSetChanged();

    }
}

}
主页面2 购物车
package com.example.month;

public class Main2Activity extends AppCompatActivity implements View. Listener,IVew{

private CheckBox Check_All;
private TextView All_Price;
private TextView Go_To_JS;
private ExpandableListView expandview;
private ArrayList<Data.DataBean> list = new ArrayList<>();
private String mUrl = \"http://www.wanandroid.com/tools/mockapi/6523/restaurant-list\";

private ExpandAdapter adapter3;
private IPresenterImpl presenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    initView();
    adapter3 = new ExpandAdapter(this,list);
    expandview.setAdapter(adapter3);
    presenter = new IPresenterImpl(this);
    presenter.getData(mUrl,\"二级\");

    adapter3.setCallback(new ExpandAdapter.AdapterCallback() {
        @Override
        //判断组的选中状态
        public void setGroupCheck(int groupPosition) {
            boolean childAllChecked = adapter3.isChildAllChecked(groupPosition);
            adapter3.childAllCheck(groupPosition,!childAllChecked);
            adapter3.notifyDataSetChanged();
            flushBottomLayout();

        }

        @Override
        public void setChildCheck(int groupPosition, int childPosition) {
            boolean childChecked = adapter3.isChildChecked(groupPosition, childPosition);
            adapter3.setChildChecked(groupPosition,childPosition,!childChecked);
            adapter3.notifyDataSetChanged();
            flushBottomLayout();
        }

        @Override
        public void setNumber(int groupPosition, int childPosition, int number) {
           adapter3.setShangPingNumber(groupPosition,childPosition,number);
           adapter3.notifyDataSetChanged();
           flushBottomLayout();

        }
    });
    Check_All.set Listener(new View. Listener() {
        @Override
        public void  (View v) {
            boolean goods = adapter3.isAllGoods();
            adapter3.setAllGoodsIsChecked(!goods);
            adapter3.notifyDataSetChanged();
            flushBottomLayout();
        }
    });

}

private void initView() {
    Check_All = (CheckBox) findViewById(R.id.Check_All);
    All_Price = (TextView) findViewById(R.id.All_Price);
    Go_To_JS = (TextView) findViewById(R.id.Go_To_JS);
    expandview = (ExpandableListView) findViewById(R.id.expandview);
    expandview.setGroupIndicator(null);
}

@Override
public void  (View v) {

}

@Override
public void showData(  data) {
  Data data1= (Data) data;
  list.addAll(data1.getData());
  adapter3.notifyDataSetChanged();
}
private void flushBottomLayout() {
    boolean allGoods = adapter3.isAllGoods();
    Check_All.setChecked(allGoods);
    float allGoodsPrice = adapter3.getAllGoodsPrice();
    int allGoodsNumber = adapter3.getAllGoodsNumber();
    All_Price.setText(\"价格:\" + allGoodsPrice);
    Go_To_JS.setText(\"去结算(\" + allGoodsNumber + \")\");
}

}
网络请求ok
public class OKHttpUtils {
private OkHttpClient okHttpClient;

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

  return okHolder.okHttpUtils;
}
static class okHolder{
    static OKHttpUtils okHttpUtils=new OKHttpUtils();
}
public void post(String uri, Callback callback){
    Request request=new Request.Builder().url(uri).build();
    okHttpClient.newCall(request).enqueue(callback);
}
自定义View
public class JiaJianView extends LinearLayout implements View. Listener {
private TextView reducece;
private TextView mnumber;
private TextView add;
private int mCount;

public JiaJianView(Context context, AttributeSet attrs) {
    super(context, attrs);
    LayoutInflater.from(context).inflate(R.layout.add_reduce_view, this);
    initViews();
}
private void initViews() {
    add = findViewById(R.id.add_tv);
    reducece = findViewById(R.id.reducec_tv);
    mnumber = findViewById(R.id.Data_number_tv);
    add.set Listener(this);
    reducece.set Listener(this);
}
public void setNumber(int number){
    this.mCount=number;
    mnumber.setText(number+\"\");

}
@Override
public void  (View v) {
    switch (v.getId()){
        case R.id.reducec_tv:
            if(mCount>0){
                mCount--;
                mnumber.setText(mCount+\"\");
                if(mcountChange!=null){

                    mcountChange.setCount(mCount);
                }
                else {
                    Toast.makeText(getContext(), \"商品已售空\", Toast.LENGTH_SHORT).show();
                }
            }
            break;
        case R.id.add_tv:
            mCount++;
            mnumber.setText(mCount+\"\");
            if (mcountChange!=null){
                mcountChange.setCount(mCount);
            }
            break;
    }
}
private OnCountChange mcountChange;
public interface OnCountChange {
    void setCount(int count);
}

public  void set (OnCountChange onCountChange){

    this.mcountChange=onCountChange;
}
MVP
public interface MyCallBack {
void onSuccess(  data);
void  onFail(Exception e);

}
public interface Model {
void getData(String uri, String pd, MyCallBack callBack);
}
public class ModelImpl implements Model {
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
Gson g=new Gson();
String s= (String) msg.obj;
switch (msg.what) {
case 0:
GridBean gridBean = g.fromJson(s, GridBean.class);
callBack.onSuccess(gridBean);
break;
case 1:
XrecyBean xrecyBean = g.fromJson(s, XrecyBean.class);
callBack.onSuccess(xrecyBean);
break;
case 2:
Data d = g.fromJson(s, Data.class);
callBack.onSuccess(d);
break;
}
}
};
private MyCallBack callBack;
@Override
public void getData(final String uri, final String pd, MyCallBack callBack) {
this.callBack=callBack;
new Thread(new Runnable() {
@Override
public void run() {
OKHttpUtils.getInstance().post(uri, new Callback() {
@Override
public void onFailure(Call call, IOException e) {

                    }

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

                        if(pd.equals(\"grid\")){
                            handler.sendMessage(handler.obtainMessage(0,response.body().string()));
                        } else if(pd.equals(\"二级\")){
                            handler.sendMessage(handler.obtainMessage(2,response.body().string()));
                        }else {
                            handler.sendMessage(handler.obtainMessage(1,response.body().string()));
                        }
                    }
                });
            }
        }).start();
}

}
IPresenter
void getData(String uri,String pd);
IPresenterimpl

public class IPresenterImpl implements IPresenter{
private ModelImpl model;
private IVew iVew;

public IPresenterImpl(IVew iVew) {
    this.iVew = iVew;
    model=new ModelImpl();
}

@Override
public void getData(String uri, String pd) {
  model.getData(uri, pd, new MyCallBack() {
      @Override
      public void onSuccess(  data) {
          iVew.showData(data);
      }

      @Override
      public void onFail(Exception e) {

      }
  });
}
public interface IVew {
void showData(  data);

}
GridAdapter
public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> implements View. Listener{
private List<GridBean.ResultsBean> list;
private Context context;

public GridAdapter(List<GridBean.ResultsBean> list, Context context) {
    this.list = list;
    this.context = context;
}

@NonNull
@Override
public GridAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = View.inflate(context, R.layout.grid_layout, null);
   ViewHolder viewHolder=new ViewHolder(view);
    view.set Listener(this);
    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull GridAdapter.ViewHolder viewHolder, int i) {
    String url = list.get(i).getUrl();
    Glide.with(context).load(url).into(viewHolder.gridimg);
    viewHolder.tvtit.setText(list.get(i).getWho());
    viewHolder.itemView.setTag(i);
}

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



public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView  gridimg;
    TextView tvtit;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
       gridimg= itemView.findViewById(R.id.grid_img);
       tvtit= itemView.findViewById(R.id.grid_tit);
    }
}
public interface OnItemClick{
    void  onItem(View v,int i);
}
private OnItemClick onItemClick;
public void set Listener(OnItemClick onItemClick){
    this.onItemClick=onItemClick;
}
@Override
public void  (View v) {
        if(onItemClick!=null){
            onItemClick.onItem(v, (Integer) v.getTag());
        }
}

XrecycleAdapter
public class XrecycleAdapter extends XRecyclerView.Adapter<XrecycleAdapter.ViewHolder> implements View. Listener{
private List<XrecyBean.DataBean> xlist;
private Context context;

public XrecycleAdapter(List<XrecyBean.DataBean> xlist, Context context) {
    this.xlist = xlist;
    this.context = context;
}

@NonNull
@Override
public XrecycleAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = View.inflate(context, R.layout.xrecy_layout, null);
    ViewHolder viewHolder=new ViewHolder(view);
    view.set Listener(this);
    return  viewHolder;
}

@Override
public void onBindViewHolder(@NonNull XrecycleAdapter.ViewHolder viewHolder, int i) {
    String urlle = xlist.get(i).getPic_url();
    Glide.with(context).load(urlle).into(viewHolder.ximg);
    viewHolder.tit.setText(xlist.get(i).getName());
    viewHolder.itemView.setTag(i);

}

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


public class ViewHolder extends RecyclerView.ViewHolder {
    private ImageView ximg;
    private TextView tit;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        ximg=itemView.findViewById(R.id.x_img);
        tit=itemView.findViewById(R.id.x_tit);
    }
}
public interface OnoItemClick{
    void  onItemo(View v,int i);
}
private OnoItemClick onoItemClick;
public void setOnoClickListener(OnoItemClick onItemClick){

    this.onoItemClick=onItemClick;
}
@Override
public void  (View v) {
    if(onoItemClick!=null){
      onoItemClick.onItemo(v, (Integer) v.getTag());
    }
}

二级列表EnpandAdapter
public class ExpandAdapter extends ExpandableListAdapter {
private Context context;
private ArrayList<Data.DataBean> list;

public ExpandAdapter(Context context, ArrayList<Data.DataBean> list) {
    this.context = context;
    this.list = list;
}

@Override
public int getGroupCount() {
    return list.size();
}

@Override
public int getChildrenCount(int groupPosition) {
    return list.get(groupPosition).getSpus().size();
}

@Override
public   getGroup(int groupPosition) {
    return null;
}

@Override
public   getChild(int groupPosition, int childPosition) {
    return null;
}

@Override
public long getGroupId(int groupPosition) {
    return 0;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return 0;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
  GroupHolder groupHolder=null;
  if(convertView==null){
      convertView=View.inflate(context,R.layout.group_list,null);
      groupHolder=new GroupHolder();
      groupHolder.cb_check=convertView.findViewById(R.id.group_cb);
      groupHolder.cb_name=convertView.findViewById(R.id.group_name);
      convertView.setTag(groupHolder);
  }
  else{
      groupHolder= (GroupHolder) convertView.getTag();
  }
    Data.DataBean dataBean = list.get(groupPosition);
    groupHolder.cb_name.setText(dataBean.getName()+\"\");
    Boolean  childallchick=isChildAllCheck(groupPosition);
    groupHolder.cb_check.setChecked(childallchick);
    groupHolder.cb_check.set Listener(new View. Listener() {
        @Override
        public void  (View v) {
            if (adapterCallback!=null){
                adapterCallback.setGroupCheck(groupPosition);

            }
        }
    });

   return convertView;
}

//用来判断小组是否全选中
private Boolean isChildAllCheck(int groupPosition) {
boolean boo=true;
Data.DataBean dataBean = list.get(groupPosition);
List<Data.DataBean.SpusBean> spus = dataBean.getSpus();
for (int i=0;i<spus.size();i++){
Data.DataBean.SpusBean bean = spus.get(i);
if(!bean.isChildChecked()){
return false;
}
}
return boo;
}

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    ChildHolder childHolder=null;
    if( convertView==null){
        convertView=View.inflate(context,R.layout.add_reduce_view,null);
        childHolder=new ChildHolder();
        convertView=View.inflate(context,R.layout.child_item,null);
        childHolder.cb_child_cb=convertView.findViewById(R.id.child_check_cb);
        childHolder.child_icon=convertView.findViewById(R.id.child_icon);
        childHolder.child_price=convertView.findViewById(R.id.child_price);
        childHolder.child_tittle=convertView.findViewById(R.id.child_ );
        childHolder.jiaJianView=convertView.findViewById(R.id.add_reduce_view);
        convertView.setTag(childHolder);
    }
    else{
        childHolder= (ChildHolder) convertView.getTag();
    }
    Data.DataBean.SpusBean spusBean = list.get(groupPosition).getSpus().get(childPosition);
    Glide.with(context).load(spusBean.getPic_url()).into(childHolder.child_icon);
    childHolder.child_tittle.setText(spusBean.getName()+\"\");
    childHolder.child_price.setText(spusBean.getSkus().get(0).getPrice());
    childHolder.cb_child_cb.setChecked(spusBean.isChildChecked());
    childHolder.jiaJianView.setNumber(spusBean.getPraise_num());
    childHolder.cb_child_cb.set Listener(new View. Listener() {
        @Override
        public void  (View v) {
            if(adapterCallback!=null){
                adapterCallback.setChildCheck(groupPosition,childPosition);

            }            }
    });
    childHolder.jiaJianView.set (new JiaJianView.OnCountChange() {
        @Override
        public void setCount(int count) {
              if(adapterCallback!=null){
                  adapterCallback.setNumber(groupPosition,childPosition,count);

              }
        }
    });

    return convertView;
}
public  void  childAllCheck(int groupPosition,boolean isCheck){
    Data.DataBean dataBean = list.get(groupPosition);
    List<Data.DataBean.SpusBean> spus = dataBean.getSpus();
    for (int i=0;i<spus.size();i++){
        Data.DataBean.SpusBean bean = spus.get(i);
        bean.setChildChecked(isCheck);

    }
}
//用来判断小组是否被选中
public boolean isChildAllChecked(int groupPosition ){
    boolean boo=true;
    Data.DataBean dataBean = list.get(groupPosition);
    List<Data.DataBean.SpusBean> spus = dataBean.getSpus();
    for(int i=0;i<spus.size();i++){
        Data.DataBean.SpusBean spusBean = spus.get(i);
        if(!spusBean.isChildChecked()){
            return false;

        }
    }
    return boo;
}
//
public void setChildChecked(int groupPositon, int childPositon, boolean isCheckBox) {
   Data.DataBean.SpusBean spusBean = list.get(groupPositon).getSpus().get(childPositon);
    spusBean.setChildChecked(isCheckBox);
}
//子控件是否被选上
public boolean isChildChecked(int groupPositon, int childPositon) {
    Data.DataBean.SpusBean spusBean = list.get(groupPositon).getSpus().get(childPositon);
    if (spusBean.isChildChecked()) {
        return true;
    }
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return false;
}
    class GroupHolder{
       CheckBox cb_check;
       TextView cb_name;
    }
    class  ChildHolder{
    CheckBox cb_child_cb;
    ImageView child_icon;
    TextView child_tittle;
    TextView child_price;
    JiaJianView jiaJianView;



    }


public interface AdapterCallback {
    //监听父控件的选中不选中
    void setGroupCheck(int groupPosition);
   //监听子控件的选中不选中
    void setChildCheck(int groupPosition, int childPosition);

    //点击加减按钮刷新
    void setNumber(int groupPosition, int childPosition, int number);

}

private AdapterCallback adapterCallback;

public void setCallback(AdapterCallback adapterCallback) {
    this.adapterCallback = adapterCallback;
}
//加减
public void setShangPingNumber(int groupPosition, int childPosition, int number) {
    Data.DataBean.SpusBean spusBean = list.get(groupPosition).getSpus().get(childPosition);
    spusBean.setPraise_num(number);
}
public boolean isAllGoods() {
    boolean boo = true;
    for (int i = 0; i < list.size(); i++) {
       Data.DataBean dataBean = list.get(i);
        for (int j = 0; j < dataBean.getSpus().size(); j++) {
            Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
            if (!spusBean.isChildChecked()) {
                boo = false;
            }
        }
    }
    return boo;
}

//全选全不选
public void setAllGoodsIsChecked(boolean isAllCheck) {
    for (int i = 0; i < list.size(); i++) {
        Data.DataBean dataBean = list.get(i);
        for (int j = 0; j < dataBean.getSpus().size(); j++) {
            Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
            spusBean.setChildChecked(isAllCheck);
        }
    }
}


//计算所有商品的价格
public float getAllGoodsPrice() {
    float allPrice = 0;
    for (int i = 0; i < list.size(); i++) {
        Data.DataBean dataBean = list.get(i);
        for (int j = 0; j < dataBean.getSpus().size(); j++) {
            Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
            if (spusBean.isChildChecked()){
                allPrice = allPrice + spusBean.getPraise_num() * Float.parseFloat(spusBean.getSkus().get(0).getPrice());
            }
        }
    }
    return allPrice;
}
//计算所有商品的数量
public int getAllGoodsNumber() {
    int allNumber = 0;
    for (int i = 0; i < list.size(); i++) {
        Data.DataBean dataBean = list.get(i);
        for (int j = 0; j < dataBean.getSpus().size(); j++) {
           Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
            if (spusBean.isChildChecked()){
                allNumber = allNumber + spusBean.getPraise_num();
            }
        }
    }
    return allNumber;
}

高德地图
public class Main3Activity extends Activity {
MapView mMapView = null;
private AMap aMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);
    //获取地图控件引用
    mMapView = (MapView) findViewById(R.id.map);
    //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
    mMapView.onCreate(savedInstanceState);
    //定义了一个地图view
    mMapView = (MapView) findViewById(R.id.map);
    mMapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。

//初始化地图控制器对象
if (aMap == null) {
aMap = mMapView.getMap();
}
MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}

收藏 打印