依赖
compile 'com.google.code.gson:gson:2.6.2 compile 'com.squareup.okhttp3:okhttp:3.3.0' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.bm.photoview:library:1.4.1' compile 'com.jcodecraeer:xrecyclerview:1.5.9'
<?xml version="1.0" encoding="utf-8"?> <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="horizontal" tools:context="com.example.dell.classifyjiemian.view.MainActivity"> <ListView android:scrollbars="none" android:layout_width="100dp" android:layout_height="match_parent" android:id="@+id/classify_listview"/> <ListView android:scrollbars="none" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rignt_classify"/> </LinearLayout>
view包
public interface IMainView { //展示左侧的列表 void showLeft(List<ClassifyBean.DataBean> list); //展示右侧数据 void showRightData(List<SubclassifycationBean.DataBean> list); //获取cid int getCid(int position); }
public class MainActivity extends AppCompatActivity implements IMainView{ private Presenterlmpl presenterlmpl; private ListView left_listview; private ListView right_list; private List<ClassifyBean.DataBean> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化界面 initViews(); //调用presenter presenterlmpl = new Presenterlmpl(); presenterlmpl.showLeftClassify(new Modellmpl(),this); } private void initViews() { left_listview = findViewById(R.id.classify_listview); right_list = findViewById(R.id.rignt_classify); //条目点击事件 left_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { //调用presenter presenterlmpl.showRightSubClassify(new Modellmpl(),MainActivity.this,i); } }); } //展示左侧列表 @Override public void showLeft(List<ClassifyBean.DataBean> list) { this.list=list; MyLeftAdapter myLeftAdapter=new MyLeftAdapter(this,list); left_listview.setAdapter(myLeftAdapter); //默认将第一个分类展示出来 presenterlmpl.showRightSubClassify(new Modellmpl(),MainActivity.this,0); } //显示右侧数据 @Override public void showRightData(List<SubclassifycationBean.DataBean> list) { MyRightAdapter myRightAdapter=new MyRightAdapter(MainActivity.this,list); right_list.setAdapter(myRightAdapter); } @Override public int getCid(int position) { int cid = list.get(position).getCid(); return cid; } }
model层
public interface IModel { //获取左侧列表数据 void getFenLei(String url, Map<String,String> map,ClassifyListener classifyListener); //获取右侧列表数据 void getsubclassifycation(String url,Map<String,String> map,SubclassifyListener subclassifyListener); }
public class Modellmpl implements IModel{ //获取左侧列表的数据 @Override public void getFenLei(String url, Map<String, String> map, final ClassifyListener classifyListener) { OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); okHttpUtils.okPost(url,map); okHttpUtils.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { //判断,code=0; try { JSONObject object = new JSONObject(json); String code = object.getString("code"); if ("0".equals(code)){ classifyListener.getClassifySuccess(json); }else { classifyListener.getSubClassifyError(json); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void okLoadError(String error) { classifyListener.getSubClassifyError(error); } }); } @Override public void getsubclassifycation(String url, Map<String, String> map, final SubclassifyListener subclassifyListener) { OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); okHttpUtils.okPost(url,map); okHttpUtils.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { try { JSONObject object = new JSONObject(json); String code = object.getString("code"); if ("0".equals(code)){ subclassifyListener.getSubclassifySuccess(json); }else { subclassifyListener.getSubclassifyError(json); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void okLoadError(String error) { subclassifyListener.getSubclassifyError(error); } }); } }
监听方法
public interface ClassifyListener { void getClassifySuccess(String json); void getSubClassifyError(String error); }
public interface SubclassifyListener { void getSubclassifySuccess(String json); void getSubclassifyError(String error); }
Presenter层
public interface IPresenter { //显示左侧列表 void showLeftClassify(IModel iModel, IMainView iMainView); //显示右侧数据 void showRightSubClassify(IModel iModel,IMainView iMainView,int position); }
public class Presenterlmpl implements IPresenter { //显示左侧接口 @Override public void showLeftClassify(IModel iModel, final IMainView iMainView) { iModel.getFenLei(HttpConfig.Classfy_Url, null, new ClassifyListener() { @Override public void getClassifySuccess(String json) { ClassifyBean classifyBean = new Gson().fromJson(json, ClassifyBean.class); List<ClassifyBean.DataBean> list = classifyBean.getData(); //传入view iMainView.showLeft(list); } @Override public void getSubClassifyError(String error) { } }); } //显示右侧数据 @Override public void showRightSubClassify(IModel iModel, final IMainView iMainView, final int position) { Map<String,String> map=new HashMap<>(); map.put("cid",iMainView.getCid(position)+""); iModel.getsubclassifycation(HttpConfig.subclassifycation_Url, map, new SubclassifyListener() { @Override public void getSubclassifySuccess(String json) { SubclassifycationBean subclassifycationBean = new Gson().fromJson(json, SubclassifycationBean.class); List<SubclassifycationBean.DataBean> list = subclassifycationBean.getData(); iMainView.showRightData(list); } @Override public void getSubclassifyError(String error) { } }); } }
左侧数据适配器
public class MyLeftAdapter extends BaseAdapter{ private Context context; private List<ClassifyBean.DataBean> list; public MyLeftAdapter(Context context, List<ClassifyBean.DataBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { MyLeftViewHolder myLeftViewHolder; if (view==null){ view= View.inflate(context, R.layout.left_item_listview,null); TextView left_title = view.findViewById(R.id.left_title); myLeftViewHolder= new MyLeftViewHolder(left_title); view.setTag(myLeftViewHolder); }else { myLeftViewHolder= (MyLeftViewHolder) view.getTag(); } myLeftViewHolder.getLeft_title().setText(list.get(i).getName()); return view; } class MyLeftViewHolder{ TextView left_title; public MyLeftViewHolder(TextView left_title) { this.left_title = left_title; } public TextView getLeft_title() { return left_title; } public void setLeft_title(TextView left_title) { this.left_title = left_title; } } }
右侧适配器
public class MyRightAdapter extends BaseAdapter { private Context context; private List<SubclassifycationBean.DataBean> list; private MyViewHolder myViewHolder; public MyRightAdapter(Context context, List<SubclassifycationBean.DataBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if (view==null){ view=View.inflate(context, R.layout.item_rightlistview,null); TextView title = view.findViewById(R.id.subclassify); MyGridView gridView = view.findViewById(R.id.zi_gridview); myViewHolder = new MyViewHolder(title,gridView); view.setTag(myViewHolder); }else { myViewHolder= (MyViewHolder) view.getTag(); } myViewHolder.getTitle().setText(list.get(i).getName()); //设置GridView MyGridAdapter myGridAdapter=new MyGridAdapter(context,list.get(i).getList()); myViewHolder.getGridView().setAdapter(myGridAdapter); return view; } class MyViewHolder { TextView title; MyGridView gridView; public MyViewHolder(TextView title, MyGridView gridView) { this.title = title; this.gridView = gridView; } public TextView getTitle() { return title; } public void setTitle(TextView title) { this.title = title; } public MyGridView getGridView() { return gridView; } public void setGridView(MyGridView gridView) { this.gridView = gridView; } } }
//自定义gridview
public class MyGridView extends GridView { public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } //改变测量模式 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, height); } }
右侧布局
<?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="match_parent" android:orientation="vertical"> <TextView android:text="子分类" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/subclassify"/> <com.example.dell.classifyjiemian.view.MyGridView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/zi_gridview" android:numColumns="3"/> </LinearLayout>
public class MyGridAdapter extends BaseAdapter { private Context context; private List<SubclassifycationBean.DataBean.ListBean> list; public MyGridAdapter(Context context, List<SubclassifycationBean.DataBean.ListBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { MyViewHolder myViewHolder; if (view==null){ view=View.inflate(context, R.layout.item_gridview,null); ImageView imagegrid = view.findViewById(R.id.gridviewPic); TextView tv = view.findViewById(R.id.gridview_tv); myViewHolder=new MyViewHolder(imagegrid,tv); view.setTag(myViewHolder); }else { myViewHolder= (MyViewHolder) view.getTag(); } Glide.with(context).load(list.get(i).getIcon()).into(myViewHolder.getImagegrid()); myViewHolder.getTv().setText(list.get(i).getName()); myViewHolder.imagegrid.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, ""+list.get(i).getPscid(), Toast.LENGTH_SHORT).show(); Intent intent=new Intent(context,GoodsActivity.class); int pscid = list.get(i).getPscid(); intent.putExtra("key",pscid); context.startActivity(intent); } }); return view; } class MyViewHolder{ ImageView imagegrid; TextView tv; public MyViewHolder(ImageView imagegrid, TextView tv) { this.imagegrid = imagegrid; this.tv = tv; } public ImageView getImagegrid() { return imagegrid; } public void setImagegrid(ImageView imagegrid) { this.imagegrid = imagegrid; } public TextView getTv() { return tv; } public void setTv(TextView tv) { this.tv = tv; } } }
跳转到数据列表页面
public class GoodsActivity extends AppCompatActivity implements GoodsView{ private static final String TAG = "GoodsActivity"; private int page=1; private GoodPresenterlmpl goodPresenterlmpl; private XRecyclerView xrecycler; private List<GoodsBean.DataBean> list; private MyRecyclerAdapter myRecyclerAdapter; private int pscid1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_goods); xrecycler = findViewById(R.id.xrecycler); xrecycler.setPullRefreshEnabled(true); xrecycler.setLoadingMoreEnabled(true); //界面初始化 initViews(); //获取pscid Intent intent = getIntent(); if (intent!=null){ pscid1 = intent.getIntExtra("key", 0); Log.d(TAG, "------: "+pscid1); } goodPresenterlmpl = new GoodPresenterlmpl(); goodPresenterlmpl.showGoodsList(new GoodsModellmpl(),this); } private void initViews() { xrecycler.setLayoutManager(new LinearLayoutManager(this)); xrecycler.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { page=1; goodPresenterlmpl.showGoodsListFresh(new GoodsModellmpl(),GoodsActivity.this); } @Override public void onLoadMore() { page++; goodPresenterlmpl.showGoodsListLoadMore(new GoodsModellmpl(),GoodsActivity.this); } }); } //商品展示 @Override public void showData(List<GoodsBean.DataBean> list) { Log.d(TAG, "showData: 商品展示"+list.toString()); this.list=list; myRecyclerAdapter = new MyRecyclerAdapter(GoodsActivity.this,list); xrecycler.setAdapter(myRecyclerAdapter); //设置条目点击事件 myRecyclerAdapter.setOnMyItemClick(new MyRecyclerAdapter.MyItemClickListener() { @Override public void onItemClick(View view, int pid) { Intent intent=new Intent(GoodsActivity.this,DetailActivity.class); intent.putExtra("pid",pid); startActivity(intent); } }); } @Override public void showGoodListFresh(List<GoodsBean.DataBean> list) { this.list=list; myRecyclerAdapter=new MyRecyclerAdapter(GoodsActivity.this,list); xrecycler.setAdapter(myRecyclerAdapter); xrecycler.refreshComplete(); } @Override public void showGoodListLoadMore(List<GoodsBean.DataBean> list) { this.list.addAll(list); myRecyclerAdapter.notifyDataSetChanged(); xrecycler.loadMoreComplete(); } @Override public int getPscid() { return pscid1; } @Override public int getPage() { return page; } }
public interface GoodsView { //展示数据 void showData(List<GoodsBean.DataBean> list); void showGoodListFresh(List<GoodsBean.DataBean> list); void showGoodListLoadMore(List<GoodsBean.DataBean> list); //获取pscid int getPscid(); //获取page int getPage(); }
Model层
public interface GoodIModel { //商品展示列表 void getGoodList(String url, Map<String,String> map, GetGoodsListener getGoodsListener); void getGoodListFresh(String url,Map<String,String> map,GetGoodsListener getGoodsListener); void getGoodListLoadMore(String url,Map<String,String> map,GetGoodsListener getGoodsListener); //详情页的商品展示 void getDetail(String url,Map<String,String> map,GetDetailListener getDetailListener); //添加购物车 void addToCart(String url,Map<String,String> map,AddListener addListener); }
public class GoodsModellmpl implements GoodIModel { private static final String TAG = "GoodsModellmpl"; //获取商品列表 @Override public void getGoodList(String url, Map<String, String> map, final GetGoodsListener getGoodsListener) { //请求数据 OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); okHttpUtils.okPost(url,map); okHttpUtils.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { try { JSONObject jsonObject = new JSONObject(json); Log.d(TAG, "okLoadSuccess: mceng00000000"+json); String code = jsonObject.getString("code"); if ("0".equals(code)){ getGoodsListener.getSuccess(json); Log.d(TAG, "okLoadSuccess: 成功======0"+json); }else { getGoodsListener.getError(json); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void okLoadError(String error) { getGoodsListener.getError(error); Log.d(TAG, "okLoadSuccess: 成功======0"+ error.toString()); } }); } @Override public void getGoodListFresh(String url, Map<String, String> map, final GetGoodsListener getGoodsListener) { OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); okHttpUtils.okPost(url, map); okHttpUtils.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { try { JSONObject object = new JSONObject(json); String code = object.getString("code"); if ("0".equals(code)){ getGoodsListener.getSuccess(json); }else { getGoodsListener.getError(json); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void okLoadError(String error) { getGoodsListener.getSuccess(error); } }); } @Override public void getGoodListLoadMore(String url, Map<String, String> map, final GetGoodsListener getGoodsListener) { OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); okHttpUtils.okPost(url,map); okHttpUtils.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { try { JSONObject jsonObject = new JSONObject(json); String code = jsonObject.getString("code"); if ("0".equals(code)){ getGoodsListener.getSuccess(json); }else { getGoodsListener.getError(json); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void okLoadError(String error) { getGoodsListener.getError(error); } }); } //实现详情页的数据请求 @Override public void getDetail(String url, Map<String, String> map, final GetDetailListener getDetailListener) { OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); okHttpUtils.okPost(url,map); okHttpUtils.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { try { JSONObject jsonObject = new JSONObject(json); String code = jsonObject.getString("code"); if ("0".equals(code)){ getDetailListener.getDetailSuccess(json); }else { getDetailListener.getDetailError(json); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void okLoadError(String error) { } }); } //实现添加购物车的数据请求 @Override public void addToCart(String url, Map<String, String> map, final AddListener addListener) { Log.e("Uri",url); OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); for (String key:map.keySet()){ Log.d("MAP",map.get(key)); } okHttpUtils.okPost(url, map);// 这里的路径 写死了 okHttpUtils.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { Log.d(TAG, "okLoadSuccess: m层------"+json); try { JSONObject jsonObject = new JSONObject(json); String code = jsonObject.getString("code"); if (code.equals("0")){ addListener.addSuccess(); }else { addListener.addError(); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void okLoadError(String error) { Log.d(TAG, "okLoadError: 错误-------"+error); } }); } }
监听类
public interface GetGoodsListener { //获取成功 void getSuccess(String json); //获取失败 void getError(String error); }
public interface GetDetailListener { void getDetailSuccess(String json); void getDetailError(String error); }
public interface AddListener { void addSuccess(); void addError(); }
p层
public interface GoodsIPresenter { //显示子商品下的商品列表 void showGoodsList(GoodIModel goodIModel, GoodsView goodsView); void showGoodsListFresh(GoodIModel goodIModel, GoodsView goodsView); void showGoodsListLoadMore(GoodIModel goodIModel, GoodsView goodsView); //显示详情页 void showDetail(GoodIModel goodIModel, IDetailView iDetailView); //添加购物车 void addCart(GoodIModel goodIModel, IDetailView iDetailView); }
public class GoodPresenterlmpl implements GoodsIPresenter{ @Override public void showGoodsList(GoodIModel goodIModel, final GoodsView goodsView) { Map<String,String> map=new HashMap<>(); map.put("pscid",goodsView.getPscid()+""); Log.d(TAG, "showGoodsListFresh: pscid===="+goodsView.getPscid()); goodIModel.getGoodList(HttpConfig.sub_goodslist_url, map, new GetGoodsListener() { @Override public void getSuccess(String json) { GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class); List<GoodsBean.DataBean> list = goodsBean.getData(); goodsView.showData(list); } @Override public void getError(String error) { } }); } //刷新 @Override public void showGoodsListFresh(final GoodIModel goodIModel, final GoodsView goodsView) { Map<String,String> map=new HashMap<>(); map.put("pscid",goodsView.getPscid()+""); Log.d(TAG, "showGoodsListFresh: pscid===="+goodsView.getPscid()); map.put("page",goodsView.getPage()+""); goodIModel.getGoodList(HttpConfig.sub_goodslist_url, map, new GetGoodsListener() { @Override public void getSuccess(String json) { GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class); List<GoodsBean.DataBean> list = goodsBean.getData(); //刷新 goodsView.showGoodListFresh(list); } @Override public void getError(String error) { Log.d(TAG, "getError: ==========="+error); } }); } @Override public void showGoodsListLoadMore(GoodIModel goodIModel, final GoodsView goodsView) { Map<String,String> map=new HashMap<>(); map.put("pscid",goodsView.getPscid()+""); map.put("page",goodsView.getPage()+""); goodIModel.getGoodList(HttpConfig.sub_goodslist_url, map, new GetGoodsListener() { @Override public void getSuccess(String json) { Log.d(TAG, "getSuccess: p层====="+json); GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class); List<GoodsBean.DataBean> list = goodsBean.getData(); goodsView.showGoodListLoadMore(list); } @Override public void getError(String error) { } }); } //显示详情 @Override public void showDetail(GoodIModel goodIModel, final IDetailView iDetailView) { Map<String,String> map=new HashMap<>(); map.put("pid",iDetailView.getPid()+""); goodIModel.getDetail(HttpConfig.Dailtel_url, map, new GetDetailListener() { @Override public void getDetailSuccess(String json) { DetailBean detailBean = new Gson().fromJson(json, DetailBean.class); DetailBean.DataBean data = detailBean.getData(); iDetailView.showGoodDetail(data); } @Override public void getDetailError(String error) { } }); } //添加购物车 @Override public void addCart(GoodIModel goodIModel, final IDetailView iDetailView) { Map<String,String> map=new HashMap<>(); map.put("pid",iDetailView.getPid()+""); map.put("uid","71"); goodIModel.addToCart(HttpConfig.addcart_url, map, new AddListener() { @Override public void addSuccess( ) { iDetailView.addSuccess(); } @Override public void addError( ) { iDetailView.addError(); } }); } }
详情页面
public class DetailActivity extends AppCompatActivity implements IDetailView,View.OnClickListener{ private static final String TAG = "DetailActivity"; private int pid; private ImageView detail_image; private Button addcart; private TextView detail_title; private ViewPager viewpager; private MyHandler myHandler = new MyHandler(); private static List<ImageView> points = new ArrayList<>(); private List<ImageView> imageViews= new ArrayList<>();; private LinearLayout buttom; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); Intent intent = getIntent(); if (intent!=null){ pid = intent.getIntExtra("pid", 0); Log.d(TAG, "onCreate: aaaa"+pid); } //初始化页面 initView(); new GoodPresenterlmpl().showDetail(new GoodsModellmpl(),this); autoPlay(); MyCire(); } private void initView() { // detail_image = findViewById(R.id.detail_image); buttom = findViewById(R.id.buttom); addcart = findViewById(R.id.detail_addcart); detail_title = findViewById(R.id.detail_title); viewpager= findViewById(R.id.viewpager); addcart.setOnClickListener(this); } @Override public void showGoodDetail(DetailBean.DataBean dataBean) { String[] images = dataBean.getImages().split("\\|"); for (int i = 0; i < images.length; i++) { String url = images[i]; ImageView imageView = new ImageView(DetailActivity.this); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); Glide.with(DetailActivity.this).load(url).into(imageView); //添加到集合 imageViews.add(imageView); } MyPagerAdapter myPagerAdapter=new MyPagerAdapter(DetailActivity.this, imageViews,images); viewpager.setAdapter(myPagerAdapter); String s = dataBean.getImages().split("\\|")[0]; // Glide.with(DetailActivity.this).load(s).into(detail_image); detail_title.setText(dataBean.getTitle()); } @Override public int getPid() { return pid; } @Override public void addSuccess() { Toast.makeText(this, "添加购物车成功", Toast.LENGTH_SHORT).show(); } @Override public void addError() { } @Override public void onClick(View view) { switch (view.getId()){ case R.id.detail_addcart: new GoodPresenterlmpl().addCart(new GoodsModellmpl(),DetailActivity.this); break; } } public void autoPlay() { myHandler.sendEmptyMessageDelayed(0,2000); } public void stopPlay() { myHandler.removeCallbacksAndMessages(null); } //自动轮播 class MyHandler extends Handler { @Override public void handleMessage(Message msg) { viewpager.setCurrentItem(viewpager.getCurrentItem() + 1); myHandler.sendEmptyMessageDelayed(0, 2000); } } public void MyCire(){ for (int i = 0; i < imageViews.size(); i++) { ImageView point = new ImageView(DetailActivity.this); point.setImageResource(R.drawable.point); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(5, 0, 0, 0); point.setLayoutParams(layoutParams); //设置间距 points.add(point); buttom.addView(point); } //默认第一个点选中 points.get(0).setSelected(true); } }
public interface IDetailView { void showGoodDetail(DetailBean.DataBean dataBean); //获取商品的pid int getPid(); //添加购物车 void addSuccess(); void addError(); }
数据列表布局
<?xml version="1.0" encoding="utf-8"?> <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.example.dell.classifyjiemian.view.GoodsActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="商品列表" android:textSize="25sp" android:id="@+id/title"/> <View android:layout_width="match_parent" android:layout_height="0.75dp" android:background="#F00"/> <com.jcodecraeer.xrecyclerview.XRecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/xrecycler"/> </LinearLayout>
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { private Context context; private List<GoodsBean.DataBean> list; private MyItemClickListener onMyItemClick; public MyRecyclerAdapter(Context context, List<GoodsBean.DataBean> list) { this.context = context; this.list = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item_recycler_view, null); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, final int position) { ImageView image = holder.getImage(); TextView price = holder.getPrice(); TextView price2 = holder.getPrice2(); TextView title = holder.getTitle(); String s = list.get(position).getImages().split("\\|")[0]; Glide.with(context).load(s).into(image); price.setText(list.get(position).getPrice()+""); price2.setText(list.get(position).getBargainPrice()+""); title.setText(list.get(position).getTitle()); //给整条条目布局添加点击事件 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onMyItemClick.onItemClick(view,list.get(position).getPid()); } }); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder{ private final ImageView image; private final TextView price; private final TextView price2; private final TextView title; public MyViewHolder(View itemView) { super(itemView); image = itemView.findViewById(R.id.item_image_view); price = itemView.findViewById(R.id.item_price); price2 = itemView.findViewById(R.id.item_price2); title = itemView.findViewById(R.id.item_title); } public ImageView getImage() { return image; } public TextView getPrice() { return price; } public TextView getPrice2() { return price2; } public TextView getTitle() { return title; } } //Recyclerview的条目点击事件 public interface MyItemClickListener{ void onItemClick(View view,int pid); } //外部可以访问的方法 public void setOnMyItemClick(MyItemClickListener onMyItemClick){ this.onMyItemClick=onMyItemClick; } }
public class MyPagerAdapter extends PagerAdapter { private Context context; private List<ImageView> list; private String[] imageUrls; public MyPagerAdapter(Context context, List<ImageView> list, String[] imageUrls) { this.context = context; this.list = list; this.imageUrls = imageUrls; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return object==view; } @Override public Object instantiateItem(final ViewGroup container, int position) { position = position %list.size(); final ImageView imageView = list.get(position); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(context,DetailPicActivity.class); intent.putExtra("urls",imageUrls); context.startActivity(intent); } }); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // super.destroyItem(container, position, object); container.removeView((View) object); } }
public class MyPhotoAdapter extends PagerAdapter { private Context context; private List<PhotoView> list; public MyPhotoAdapter(Context context, List<PhotoView> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { PhotoView photoView = list.get(position); container.addView(photoView); return photoView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // super.destroyItem(container, position, object); container.removeView((View) object); } }
详情页面布局
<?xml version="1.0" encoding="utf-8"?> <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"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="450dp" android:id="@+id/viewpager"/> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:background="#ff00ff" android:id="@+id/buttom"></LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/detail_title"/> <Button android:text="加入购物车" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/detail_addcart"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <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" tools:context="com.example.dell.classifyjiemian.view.DetailPicActivity"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/detail_pic_viewpager"/> </LinearLayout>
可以放大缩小的图片页面
public class DetailPicActivity extends AppCompatActivity { private String[] urls; private ViewPager detail_pic_viewpager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail_pic); Intent intent = getIntent(); if (intent !=null){ urls = intent.getStringArrayExtra("urls"); } initViews(); //显示图片 showPics(); } private void showPics() { List<PhotoView> list = new ArrayList<>(); for (int i = 0; i < urls.length; i++) { PhotoView photoView = new PhotoView(this); photoView.setScaleType(ImageView.ScaleType.CENTER_CROP); //设置可以双击方法 photoView.enable(); Glide.with(this).load(urls[i]).into(photoView); list.add(photoView); } MyPhotoAdapter myPhotoAdapter = new MyPhotoAdapter(this, list); detail_pic_viewpager.setAdapter(myPhotoAdapter); } private void initViews() { detail_pic_viewpager = findViewById(R.id.detail_pic_viewpager); } }
地址路径
public class HttpConfig { public static String Classfy_Url="https://www.zhaoapi.cn/product/getCatagory"; public static String subclassifycation_Url="https://www.zhaoapi.cn/product/getProductCatagory"; public static String Dailtel_url = "https://www.zhaoapi.cn/product/getProductDetail"; public static String sub_goodslist_url = "https://www.zhaoapi.cn/product/getProducts"; public static String addcart_url="https://www.zhaoapi.cn/product/addCart"; }
请求
public class OkHttpUtils { private MyHandler myHandler=new MyHandler(); private String mobile; private String password; //单例模式 private static OkHttpUtils okHttpUtils=null; private OkLoadListener okLoadListener; public static OkHttpUtils getInstance(){ if (okHttpUtils==null){ okHttpUtils=new OkHttpUtils(); } return okHttpUtils; } //Get请求 public void okGet(String url){ //创建okhttpclient OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build(); //用request请求,将URL和参数进行封装 Request request = new Request.Builder().url(url).build(); //call是请求队列ok里面请求队列默认是一个 Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = myHandler.obtainMessage(); message.what=0; message.obj=e.getMessage(); myHandler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Message message = myHandler.obtainMessage(); message.what=1; message.obj = response.body().string(); myHandler.sendMessage(message); } }); } //post请求 public void okPost(String url, Map<String,String> map){ //创建okhttpclient OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build(); FormBody.Builder builder = new FormBody.Builder(); //遍历map集合,将参数放入body即可 遍历的核心思想就是。根据键取值 if (map!=null){ Set<String> keys = map.keySet(); for (String key : keys){ String value = map.get(key); builder.add(key,value); } } FormBody body = builder.build(); //用request请求,将URL和参数进行封装 Request request = new Request.Builder().url(url).post(body).build(); //call是请求队列,ok里面请求队列默认是一个 Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = myHandler.obtainMessage(); message.what = 1; message.obj = e.getMessage(); myHandler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Message message = myHandler.obtainMessage(); message.what =0; message.obj = response.body().string(); myHandler.sendMessage(message); } }); } //将输入发送到主线程,处理线程问题 class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int w = msg.what; switch (w){ case 1://失败 String error = (String) msg.obj; //传出去 okLoadListener.okLoadError(error); break; case 0: String json= (String) msg.obj; okLoadListener.okLoadSuccess(json); break; } } } public void setOkLoadListener(OkLoadListener okLoadListener){ this.okLoadListener =okLoadListener; } //拦截器 class MyIntercepter implements Interceptor{ @Override public Response intercept(Chain chain) throws IOException { //获取请求 Request request = chain.request(); String method = request.method(); //判断如果是formBody if (method.equals("GET")){ HttpUrl url = request.url(); String newUrl = url.toString() + "?mobile=" + mobile + "&password=" + password; Request request1 = request.newBuilder().url(newUrl).build(); Response proceed = chain.proceed(request1); return proceed; }else if (method.equals("POST")){ //创建新的body,将原来的参数,放入新的body里面,然后再讲公共参数,添加到新的body里面 FormBody.Builder newBuilder = new FormBody.Builder(); RequestBody body = request.body(); if (body instanceof FormBody){ for (int i = 0; i <((FormBody) body).size() ; i++) { String name = ((FormBody) body).name(i); String value = ((FormBody) body).value(i); //添加 newBuilder.add(name,value); } FormBody newBody = newBuilder.add("source", "android").build(); //创建新的请求 Request request1 = request.newBuilder().post(newBody).build(); //让request去重新请求,proceed所有http请求的核心 Response proceed = chain.proceed(request1); Log.e("AAA",request1.url().toString()); return proceed; } } return null; } } //上传头像 public void upLoadImage(String upload_url, File file) { //创建OKHttpClient OkHttpClient okHttpClient = new OkHttpClient(); //创建MultiPartBody MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM); //设置参数 MediaType mediaType = MediaType.parse("image/png"); builder.addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file)); //添加其他参数 builder.addFormDataPart("uid", "71"); MultipartBody body = builder.build(); //创建请求队列 Request request = new Request.Builder().url(upload_url).post(body).build(); Call newCall = okHttpClient.newCall(request); newCall.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // Log.d(TAG, "onFailure() returned: " + "shibai---" + e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { // Log.d(TAG, "onResponse() returned: " + response.body().string()); } }); } }
ok的网络监听
public interface OkLoadListener { void okLoadSuccess(String json); void okLoadError(String error); }