主页面 上面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);
}
继续阅读与本文标签相同的文章
深度学习AI圣经读书笔记
《区块链原理、设计与应用》一3.4 资源共享
-
MySQL每组求最值的记录与每组前N条记录
2026-05-18栏目: 教程
-
OCP-052考试题库汇总(55)-CUUG内部解答版
2026-05-18栏目: 教程
-
【云栖活动】架构师、产品经理一对一座谈会/WORKSHOP-已截止
2026-05-18栏目: 教程
-
MySQL入门书籍和方法分享
2026-05-18栏目: 教程
-
树莓派4&阿里云物联网平台上云开发实操
2026-05-18栏目: 教程
