效果图先来两张
首页面是两个button按钮
点击跳转就不贴代码了
直接写跳转到流式布局页面
记得添加权限三件套
还有App
name
依赖
//图片 compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.github.bumptech.glide:glide:3.6.1' compile 'com.facebook.fresco:fresco:1.8.1' //Imageloader compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' //recyclerview compile 'com.android.support:recyclerview-v7:27+' //butterknife compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' //BottomTabBar compile 'com.hjm:BottomTabBar:1.1.1' compile 'com.android.support:design:27+' compile 'com.youth.banner:banner:1.4.9' implementation 'com.squareup.okhttp3:okhttp:3.9.1' implementation 'com.google.code.gson:gson:2.8.+' //okHttp 2个 compile 'com.squareup.okhttp3:okhttp:3.6.0' compile 'com.squareup.okio:okio:1.11.0' //rxjava compile 'io.reactivex.rxjava2:rxjava:2.0.7' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' //retrofit compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:converter-scalars:2.1.0' //一个刷新的依赖 compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1' implementation 'com.sunfusheng:marqueeview:1.3.3' implementation 'com.jcodecraeer:xrecyclerview:1.3.2' //一个刷新的依赖 compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1' compile 'org.xutils:xutils:3.3.36'
Api包
public class Api {
//https://www.zhaoapi.cn/product/searchProducts?keywords=笔记本&page=1
public static final String BASE_API = "https://www.zhaoapi.cn/";
public static final String DUANZI_API = "product/searchProducts";
public static final String DUANZI_API2 = "product/addCart";
}
ApiService
public interface ApiService {
@GET
Observable<ResponseBody> doGet(@Url String url, @QueryMap Map<String, String> map);
}
RetrofitHelper
public class RetrofitHelper {
public static OkHttpClient okHttpClient;
public static ApiService apiService;
static {
getOkHttpClient();
}
private static OkHttpClient getOkHttpClient() {
if (okHttpClient == null){
synchronized (OkHttpClient.class){
if (okHttpClient == null){
File file = new File(Environment.getExternalStorageDirectory(),"cahce");
long fileSize = 10*1024*1024;
okHttpClient = new OkHttpClient.Builder()
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15,TimeUnit.SECONDS)
.connectTimeout(15,TimeUnit.SECONDS)
.cache(new Cache(file,fileSize))
.build();
}
}
}
return okHttpClient;
}
public static ApiService getApiService(String url){
if (apiService == null){
synchronized (OkHttpClient.class){
apiService = createApiService(ApiService.class,url);
}
}
return apiService;
}
private static <T>T createApiService(Class<T> tClass, String url) {
T t = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build()
.create(tClass);
return t;
}
}
mvp包
import java.util.HashMap;
import java.util.Map;
import comz.example.zld.zhanglingdan20180531.tuyi.api.Api;
import comz.example.zld.zhanglingdan20180531.tuyi.api.RetrofitHelper;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
public class SousuoModel {
private SousuoZiP sousuoZiP;
public SousuoModel(SousuoZiP sousuoZiP) {
this.sousuoZiP = sousuoZiP;
}
public void getData(String url,String key, int page) {
Map<String, String> parmars = new HashMap<>();
parmars.put("keywords", key);
parmars.put("page", page+"");
RetrofitHelper.getApiService(Api.BASE_API).doGet(url, parmars)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody responseBody) {
sousuoZiP.onSuccess(responseBody);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
SousuoPresenter
public class SousuoPresenter implements SousuoZiP {
private SousuoModel sousuoModel;
private SousuoView sousuoView;
public SousuoPresenter(){
sousuoModel = new SousuoModel(this);
}
public void attachView(SousuoView iDuanZiView){
this.sousuoView = iDuanZiView;
}
public void dettachView(){
if (sousuoView != null){
sousuoView = null;
}
}
public void getData(String url,String key,int page){
sousuoModel.getData(url,key,page);
}
@Override
public void onSuccess(ResponseBody responseBody) {
sousuoView.onSuccess(responseBody);
}
}
SousuoView
public interface SousuoView {
void onSuccess(ResponseBody responseBody);
}
SousuoZiP
public interface SousuoZiP {
void onSuccess(ResponseBody responseBody);
}
TianjiaModel
import android.util.Log;
import java.util.HashMap;
import java.util.Map;
import comz.example.zld.zhanglingdan20180531.tuyi.api.Api;
import comz.example.zld.zhanglingdan20180531.tuyi.api.RetrofitHelper;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
public class TianjiaModel {
private TianjiaZiP sousuoZiP;
public TianjiaModel(TianjiaZiP sousuoZiP) {
this.sousuoZiP = sousuoZiP;
}
// https://www.zhaoapi.cn/product/addCart?uid=15157&pid=80&token=C7C24A80854F96DB50620EB5507F0878
public void getData(String url, String key) {
Map<String, String> parmars = new HashMap<>();
parmars.put("uid", "15157");
parmars.put("pid", key);
parmars.put("token", "C7C24A80854F96DB50620EB5507F0878");
parmars.put("source", "android");
RetrofitHelper.getApiService(Api.BASE_API).doGet(url, parmars)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
Log.d("TianjiaModel3", "失败");
}
@Override
public void onNext(ResponseBody responseBody) {
sousuoZiP.onSuccess(responseBody);
Log.d("TianjiaModel", "cg");
}
@Override
public void onError(Throwable e) {
Log.d("TianjiaModel2", "失败");
}
@Override
public void onComplete() {
Log.d("TianjiaModel1", "失败");
}
});
}
}
TianjiaPresenter
import okhttp3.ResponseBody;
public class TianjiaPresenter implements TianjiaZiP {
private TianjiaModel sousuoModel;
private TianjiaView sousuoView;
public TianjiaPresenter(){
sousuoModel = new TianjiaModel(this);
}
public void attachView(TianjiaView iDuanZiView){
this.sousuoView = iDuanZiView;
}
public void dettachView(){
if (sousuoView != null){
sousuoView = null;
}
}
public void getData(String url,String key){
sousuoModel.getData(url,key);
}
@Override
public void onSuccess(ResponseBody responseBody) {
sousuoView.onSuccess(responseBody);
}
}
TianjiaView
public interface TianjiaView {
void onSuccess(ResponseBody responseBody);
}
TianjiaZiP
public interface TianjiaZiP { void onSuccess(ResponseBody responseBody); } tianjiangouwuche包
TianjiaModel
import android.util.Log;
import java.util.HashMap;
import java.util.Map;
import comz.example.zld.zhanglingdan20180531.tuyi.api.Api;
import comz.example.zld.zhanglingdan20180531.tuyi.api.RetrofitHelper;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
public class TianjiaModel {
private TianjiaZiP sousuoZiP;
public TianjiaModel(TianjiaZiP sousuoZiP) {
this.sousuoZiP = sousuoZiP;
}
// https://www.zhaoapi.cn/product/addCart?uid=15157&pid=80&token=C7C24A80854F96DB50620EB5507F0878
public void getData(String url, String key) {
Map<String, String> parmars = new HashMap<>();
parmars.put("uid", "15157");
parmars.put("pid", key);
parmars.put("token", "C7C24A80854F96DB50620EB5507F0878");
parmars.put("source", "android");
RetrofitHelper.getApiService(Api.BASE_API).doGet(url, parmars)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
Log.d("TianjiaModel3", "失败");
}
@Override
public void onNext(ResponseBody responseBody) {
sousuoZiP.onSuccess(responseBody);
Log.d("TianjiaModel", "cg");
}
@Override
public void onError(Throwable e) {
Log.d("TianjiaModel2", "失败");
}
@Override
public void onComplete() {
Log.d("TianjiaModel1", "失败");
}
});
}
}
TianjiaPresenter
import okhttp3.ResponseBody;
public class TianjiaPresenter implements TianjiaZiP {
private TianjiaModel sousuoModel;
private TianjiaView sousuoView;
public TianjiaPresenter(){
sousuoModel = new TianjiaModel(this);
}
public void attachView(TianjiaView iDuanZiView){
this.sousuoView = iDuanZiView;
}
public void dettachView(){
if (sousuoView != null){
sousuoView = null;
}
}
public void getData(String url,String key){
sousuoModel.getData(url,key);
}
@Override
public void onSuccess(ResponseBody responseBody) {
sousuoView.onSuccess(responseBody);
}
}
TianjiaView
public interface TianjiaView {
void onSuccess(ResponseBody responseBody);
}
TianjiaZiP
public interface TianjiaZiP {
void onSuccess(ResponseBody responseBody);
}
自定义View
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class FlowLayout extends ViewGroup {
public FlowLayout(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
public FlowLayout(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public FlowLayout(Context context)
{
this(context, null);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
// 如果是warp_content情况下,记录宽和高
int width = 0;
int height = 0;
// 记录每一行的宽度与高度
int lineWidth = 0;
int lineHeight = 0;
// 得到内部元素的个数
int cCount = getChildCount();
for (int i = 0; i < cCount; i++)
{
// 通过索引拿到每一个子view
View child = getChildAt(i);
// 测量子View的宽和高,系统提供的measureChild
measureChild(child, widthMeasureSpec, heightMeasureSpec);
// 得到LayoutParams
MarginLayoutParams lp = (MarginLayoutParams) child
.getLayoutParams();
// 子View占据的宽度
int childWidth = child.getMeasuredWidth() + lp.leftMargin
+ lp.rightMargin;
// 子View占据的高度
int childHeight = child.getMeasuredHeight() + lp.topMargin
+ lp.bottomMargin;
// 换行 判断 当前的宽度大于 开辟新行
if (lineWidth + childWidth > sizeWidth - getPaddingLeft() - getPaddingRight())
{
// 对比得到最大的宽度
width = Math.max(width, lineWidth);
// 重置lineWidth
lineWidth = childWidth;
// 记录行高
height += lineHeight;
lineHeight = childHeight;
}
else
// 未换行
{
// 叠加行宽
lineWidth += childWidth;
// 得到当前行最大的高度
lineHeight = Math.max(lineHeight, childHeight);
}
// 特殊情况,最后一个控件
if (i == cCount - 1)
{
width = Math.max(lineWidth, width);
height += lineHeight;
}
}
setMeasuredDimension(
modeWidth == MeasureSpec.EXACTLY ? sizeWidth : width + getPaddingLeft() + getPaddingRight(),
modeHeight == MeasureSpec.EXACTLY ? sizeHeight : height + getPaddingTop() + getPaddingBottom()//
);
}
/**
* 存储所有的View
*/
private List<List<View>> mAllViews = new ArrayList<List<View>>();
/**
* 每一行的高度
*/
private List<Integer> mLineHeight = new ArrayList<Integer>();
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b)
{
mAllViews.clear();
mLineHeight.clear();
// 当前ViewGroup的宽度
int width = getWidth();
int lineWidth = 0;
int lineHeight = 0;
// 存放每一行的子view
List<View> lineViews = new ArrayList<View>();
int cCount = getChildCount();
for (int i = 0; i < cCount; i++)
{
View child = getChildAt(i);
MarginLayoutParams lp = (MarginLayoutParams) child
.getLayoutParams();
int childWidth = child.getMeasuredWidth();
int childHeight = child.getMeasuredHeight();
// 如果需要换行
if (childWidth + lineWidth + lp.leftMargin + lp.rightMargin > width - getPaddingLeft() - getPaddingRight())
{
// 记录LineHeight
mLineHeight.add(lineHeight);
// 记录当前行的Views
mAllViews.add(lineViews);
// 重置我们的行宽和行高
lineWidth = 0;
lineHeight = childHeight + lp.topMargin + lp.bottomMargin;
// 重置我们的View集合
lineViews = new ArrayList<View>();
}
lineWidth += childWidth + lp.leftMargin + lp.rightMargin;
lineHeight = Math.max(lineHeight, childHeight + lp.topMargin
+ lp.bottomMargin);
lineViews.add(child);
}// for end
// 处理最后一行
mLineHeight.add(lineHeight);
mAllViews.add(lineViews);
// 设置子View的位置
int left = getPaddingLeft();
int top = getPaddingTop();
// 行数
int lineNum = mAllViews.size();
for (int i = 0; i < lineNum; i++)
{
// 当前行的所有的View
lineViews = mAllViews.get(i);
lineHeight = mLineHeight.get(i);
for (int j = 0; j < lineViews.size(); j++)
{
View child = lineViews.get(j);
// 判断child的状态
if (child.getVisibility() == View.GONE)
{
continue;
}
MarginLayoutParams lp = (MarginLayoutParams) child
.getLayoutParams();
int lc = left + lp.leftMargin;
int tc = top + lp.topMargin;
int rc = lc + child.getMeasuredWidth();
int bc = tc + child.getMeasuredHeight();
// 为子View进行布局
child.layout(lc, tc, rc, bc);
left += child.getMeasuredWidth() + lp.leftMargin
+ lp.rightMargin;
}
left = getPaddingLeft();
top += lineHeight;
}
}
/**
* 与当前ViewGroup对应的LayoutParams
*/
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs)
{
return new MarginLayoutParams(getContext(), attrs);
}
}
MyAdapter
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
import comz.example.zld.zhanglingdan20180531.R;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context context;
private List<SousuoBean.DataBean> list;
OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
}
public MyAdapter(Context context, List<SousuoBean.DataBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ViewHolder holder;
View view = View.inflate(context, R.layout.sousuo_recy_item, null);
holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.tv1.setText(list.get(position).getSubhead());
holder.tv2.setText(list.get(position).getTitle());
String icon = (String) list.get(position).getImages();
if (icon.indexOf("|") != -1) {
String result = icon.substring(0, icon.indexOf("|"));
//加载图片 url=result
holder.touXiang.setImageURI(result);
} else {
//加载图片 url=iamges
holder.touXiang.setImageURI(icon);
}
if (mOnItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onClick(position);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mOnItemClickListener.onLongClick(position);
return false;
}
});
}
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
SimpleDraweeView touXiang;
TextView tv1;
TextView tv2;
public ViewHolder(View itemView) {
super(itemView);
touXiang = itemView.findViewById(R.id.item_simple);
tv1 = itemView.findViewById(R.id.item_textView);
tv2 = itemView.findViewById(R.id.item_textView2);
}
}
}
OnItemClickListener
public interface OnItemClickListener {
void onClick(int position);
void onLongClick(int position);
}
SousuoActivity
package comz.example.zld.zhanglingdan20180531.tuyi;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import com.google.gson.Gson;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.io.IOException;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import comz.example.zld.zhanglingdan20180531.R;
import comz.example.zld.zhanglingdan20180531.tuyi.api.Api;
import comz.example.zld.zhanglingdan20180531.tuyi.mvp.SousuoPresenter;
import comz.example.zld.zhanglingdan20180531.tuyi.mvp.SousuoView;
import okhttp3.ResponseBody;
public class SousuoActivity extends AppCompatActivity implements SousuoView{
int page = 1;
@BindView(R.id.recy)
RecyclerView mRecy;
@BindView(R.id.refreshLayout)
SmartRefreshLayout refreshLayout;
private SousuoPresenter sousuoPresenter;
private String keywords;
private List<SousuoBean.DataBean> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sousuo);
ButterKnife.bind(this);
keywords = getIntent().getStringExtra("keywords");
Log.d("SousuoActivity", keywords);
sousuoPresenter = new SousuoPresenter();
sousuoPresenter.attachView(this);
sousuoPresenter.getData(Api.DUANZI_API, keywords, page);
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshLayout) {
page = page + 1;
Log.d("SousuoActivity", "page:" + page);
sousuoPresenter.getData(Api.DUANZI_API, keywords, page);
refreshLayout.finishLoadMore(2000);
}
});
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshLayout) {
page = 1;
sousuoPresenter.getData(Api.DUANZI_API, keywords, page);
refreshLayout.finishRefresh(2000);
}
});
}
@Override
public void onSuccess(ResponseBody responseBody) {
try {
String string = responseBody.string();
SousuoBean sousuoBean = new Gson().fromJson(string, SousuoBean.class);
data = sousuoBean.getData();
Log.d("SousuoActivity", "data:" + data);
MyAdapter myAdapter = new MyAdapter(this, data);
mRecy.setAdapter(myAdapter);
mRecy.setLayoutManager(new LinearLayoutManager(this));
myAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onClick(int position) {
yunxing(position);
}
@Override
public void onLongClick(int position) {
yunxing(position);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
private void yunxing(int position) {
String images = data.get(position).getImages();
String subhead = data.get(position).getSubhead();
String title = data.get(position).getTitle();
int pid = data.get(position).getPid();
double pscid = data.get(position).getPscid();
double price = data.get(position).getPrice();
Intent intent = new Intent(SousuoActivity.this, SpxqActivity.class);
intent.putExtra("images", images);
intent.putExtra("subhead", subhead);
intent.putExtra("title", title);
intent.putExtra("pid", pid+"");
intent.putExtra("pscid", pscid+"");
intent.putExtra("price", price+"");
startActivity(intent);
}
/**
* 销毁
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (sousuoPresenter == null) {
sousuoPresenter.dettachView();
}
}
}
SousuoBean
package comz.example.zld.zhanglingdan20180531.tuyi;
import java.util.List;
public class SousuoBean {
/**
* msg : 查询成功
* code : 0
* data : [{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":80,"price":777,"pscid":40,"salenum":776,"sellerid":1,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":79,"price":888,"pscid":40,"salenum":5454,"sellerid":23,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":78,"price":999,"pscid":40,"salenum":656,"sellerid":22,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","itemtype":0,"pid":57,"price":5199,"pscid":40,"salenum":4343,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银 "},{"bargainPrice":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","itemtype":0,"pid":59,"price":5599,"pscid":40,"salenum":675,"sellerid":3,"subhead":"游戏本选择4G独显,拒绝掉帧】升级版IPS全高清防眩光显示屏,WASD方向键颜色加持,三大出风口立体散热!","title":"戴尔DELL灵越游匣15PR-6648B GTX1050 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 128GSSD+1T 4G独显 IPS)黑"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/5025518.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8830/106/1760940277/195595/5cf9412f/59bf2ef5N5ab7dc16.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5428/70/1520969931/274676/b644dd0d/591128e7Nd2f70da0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5566/365/1519564203/36911/620c750c/591128eaN54ac3363.jpg!q70.jpg","itemtype":1,"pid":58,"price":6399,"pscid":40,"salenum":545,"sellerid":2,"subhead":"升级4G大显存!Nvme协议Pcie SSD,速度快人一步】GTX1050Ti就选拯救者!专业游戏键盘&新模具全新设计!","title":"联想(Lenovo)拯救者R720 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 1T+128G SSD GTX1050Ti 4G IPS 黑)"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":63,"price":10000,"pscid":40,"salenum":3232,"sellerid":7,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:43:53","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":64,"price":11000,"pscid":40,"salenum":0,"sellerid":8,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":65,"price":12000,"pscid":40,"salenum":868,"sellerid":9,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":66,"price":13000,"pscid":40,"salenum":7676,"sellerid":10,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}]
* page : 1
*/
private String msg;
private String code;
private String page;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* bargainPrice : 11800
* createtime : 2017-10-14T21:38:26
* detailUrl : https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1
* images : https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg
* itemtype : 1
* pid : 80
* price : 777
* pscid : 40
* salenum : 776
* sellerid : 1
* subhead : 购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)
* title : 全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G
*/
private double bargainPrice;
private String createtime;
private String detailUrl;
private String images;
private double itemtype;
private int pid;
private double price;
private double pscid;
private double salenum;
private double sellerid;
private String subhead;
private String title;
public double getBargainPrice() {
return bargainPrice;
}
public void setBargainPrice(double bargainPrice) {
this.bargainPrice = bargainPrice;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public String getDetailUrl() {
return detailUrl;
}
public void setDetailUrl(String detailUrl) {
this.detailUrl = detailUrl;
}
public String getImages() {
return images;
}
public void setImages(String images) {
this.images = images;
}
public double getItemtype() {
return itemtype;
}
public void setItemtype(double itemtype) {
this.itemtype = itemtype;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getPscid() {
return pscid;
}
public void setPscid(double pscid) {
this.pscid = pscid;
}
public double getSalenum() {
return salenum;
}
public void setSalenum(int salenum) {
this.salenum = salenum;
}
public double getSellerid() {
return sellerid;
}
public void setSellerid(double sellerid) {
this.sellerid = sellerid;
}
public String getSubhead() {
return subhead;
}
public void setSubhead(String subhead) {
this.subhead = subhead;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
SpxqActivity
package comz.example.zld.zhanglingdan20180531.tuyi;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.drawee.view.SimpleDraweeView;
import java.io.IOException;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import comz.example.zld.zhanglingdan20180531.R;
import comz.example.zld.zhanglingdan20180531.tuyi.api.Api;
import comz.example.zld.zhanglingdan20180531.tuyi.mvp.TianjiaPresenter;
import comz.example.zld.zhanglingdan20180531.tuyi.mvp.TianjiaView;
import okhttp3.ResponseBody;
public class SpxqActivity extends AppCompatActivity implements TianjiaView {
@BindView(R.id.spxq_sim)
SimpleDraweeView spxq_sim;
@BindView(R.id.spxq_textView1)
TextView spxq_textView1;
@BindView(R.id.spxq_textView2)
TextView spxq_textView2;
@BindView(R.id.spxq_button)
Button spxqButton;
private String pid;
private TianjiaPresenter tianjiaPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spxq);
ButterKnife.bind(this);
Intent intent = getIntent();
String images = intent.getStringExtra("images");
if (images.indexOf("|") != -1) {
String result = images.substring(0, images.indexOf("|"));
//加载图片 url=result
spxq_sim.setImageURI(result);
} else {
//加载图片 url=iamges
spxq_sim.setImageURI(images);
}
String subhead = intent.getStringExtra("subhead");
spxq_textView1.setText(subhead);
String title = intent.getStringExtra("title");
spxq_textView2.setText(title);
pid = intent.getStringExtra("pid");
String pscid = intent.getStringExtra("pscid");
String price = intent.getStringExtra("price");
Log.d("SpxqActivity", pid);
Log.d("SpxqActivity", pscid);
Log.d("SpxqActivity", price);
}
@Override
public void onSuccess(ResponseBody responseBody) {
try {
String string = responseBody.string();
Toast.makeText(this, "成功", Toast.LENGTH_SHORT).show();
Log.d("SpxqActivity___", string.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
@OnClick(R.id.spxq_button)
public void onViewClicked() {
tianjiaPresenter = new TianjiaPresenter();
tianjiaPresenter.attachView(this);
tianjiaPresenter.getData(Api.DUANZI_API2, pid);
}
/**
* 销毁
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (tianjiaPresenter == null) {
tianjiaPresenter.dettachView();
}
}
}
Activity
TuYi
package comz.example.zld.zhanglingdan20180531.tuyi;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import comz.example.zld.zhanglingdan20180531.R;
public class TuYi extends AppCompatActivity {
@BindView(R.id.edit)
EditText editText;
@BindView(R.id.tv_sou)
TextView tv;
@BindView(R.id.id_flowlayout)
FlowLayout mFlowLayout;
@BindView(R.id.clear)
Button clear;
private String[] mVals = new String[]{"苹果手机", "笔记本电脑", "电饭煲 ", "腊肉",
"特产", "剃须刀", "包包", "康佳", "特产", "剃须刀", "包包",};
private LayoutInflater mInflater;
private String s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tu_yi);
mInflater = LayoutInflater.from(this);
ButterKnife.bind(this);
//设置默认显示
for (int i = 0; i < mVals.length; i++) {
tv = (TextView) mInflater.inflate(R.layout.search_label_tv, mFlowLayout, false);
tv.setText(mVals[i]);
final String str = tv.getText().toString();
//点击事件
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TuYi.this, "你点击了" + str, Toast.LENGTH_SHORT).show();
}
});
mFlowLayout.addView(tv);//添加到父View
}
}
@OnClick({R.id.tv_sou, R.id.id_flowlayout, R.id.clear})
public void onViewClicked(View v) {
switch (v.getId()) {
case R.id.tv_sou:
s = editText.getText().toString();
tv = (TextView) mInflater.inflate(
R.layout.search_label_tv, mFlowLayout, false);
tv.setText(s);
final String str = tv.getText().toString();
//点击事件
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TuYi.this, "00你点击了" + str, Toast.LENGTH_SHORT).show();
}
});
mFlowLayout.addView(tv);//添加到父View
Intent intent = new Intent(TuYi.this, SousuoActivity.class);
intent.putExtra("keywords",s);
startActivity(intent);
break;
case R.id.id_flowlayout:
break;
case R.id.clear:
mFlowLayout.removeAllViews();
break;
}
}
}
tuer包
Apii包
public class Apii {
//https://www.zhaoapi.cn/product/getCarts?uid=15157&source=android
public static final String BASE_API = "https://www.zhaoapi.cn/";
public static final String DUANZI_API = "product/getCarts";
}
ApiServicei
public interface ApiServicei {
@GET
Observable<ResponseBody> doGet(@Url String url, @QueryMap Map<String, String> map);
}
SpxqModel
import java.util.HashMap;
import java.util.Map;
import comz.example.zld.zhanglingdan20180531.tuyi.api.Api;
import comz.example.zld.zhanglingdan20180531.tuyi.api.RetrofitHelper;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
public class SpxqModel {
private SpxqZiP sousuoZiP;
public SpxqModel(SpxqZiP sousuoZiP) {
this.sousuoZiP = sousuoZiP;
}
public void getData(String url,String key) {
Map<String, String> parmars = new HashMap<>();
parmars.put("uid", "15157");
parmars.put("source", "android");
RetrofitHelper.getApiService(Api.BASE_API).doGet(url, parmars)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody responseBody) {
sousuoZiP.onSuccess(responseBody);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
SpxqPresenter
package comz.example.zld.zhanglingdan20180531.tuer.mvp;
import okhttp3.ResponseBody;
public class SpxqPresenter implements SpxqZiP {
private SpxqModel spxqModel;
private SpxqView spxqView;
public SpxqPresenter(){
spxqModel = new SpxqModel(this);
}
public void attachView(SpxqView iDuanZiView){
this.spxqView = iDuanZiView;
}
public void dettachView(){
if (spxqView != null){
spxqView = null;
}
}
public void getData(String url,String key){
spxqModel.getData(url,key);
}
@Override
public void onSuccess(ResponseBody responseBody) {
spxqView.onSuccess(responseBody);
}
}
SpxqView
public interface SpxqView {
void onSuccess(ResponseBody responseBody);
}
SpxqZiP
public interface SpxqZiP {
void onSuccess(ResponseBody responseBody);
}
MyExpandAdapter
package comz.example.zld.zhanglingdan20180531.tuer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.List;
import comz.example.zld.zhanglingdan20180531.R;
public class MyExpandAdapter extends BaseExpandableListAdapter {
private List<ShoppCarBean.DataBean> data;
private Context context;
private ModifyGoodsItemNumberListener modifyGoodsItemNumberListener;
private CheckGroupItemListener checkGroupItemListener;
//接收是否处于编辑状态的一个boolean值
private boolean isEditor;
//商家以及商品是否被选中的一个监听
public void setCheckGroupItemListener(CheckGroupItemListener checkGroupItemListener){
this.checkGroupItemListener = checkGroupItemListener;
}
//设置商品的加减监听
public void setModifyGoodsItemNumberListener(ModifyGoodsItemNumberListener modifyGoodsItemNumberListener){
this.modifyGoodsItemNumberListener = modifyGoodsItemNumberListener;
}
//是否显示删除按钮
public void showDeleteButton(boolean isEditor){
this.isEditor = isEditor;
//刷新适配器
notifyDataSetChanged();
}
public MyExpandAdapter(Context context) {
this.context = context;
}
public void setList(List<ShoppCarBean.DataBean> data){
this.data=data;
notifyDataSetChanged();
}
@Override
public int getGroupCount() {
return data !=null?data.size() :0;
}
@Override
public int getChildrenCount(int i) {
return data!=null&&data.get(i).getList()!=null?data.get(i).getList().size() :0;
}
@Override
public Object getGroup(int i) {
return data.get(i);
}
@Override
public Object getChild(int i, int i1) {
return data.get(i).getList().get(i1);
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(final int groupPosition, boolean b, View view, ViewGroup viewGroup) {
if(view==null){
view= LayoutInflater.from(context).inflate(R.layout.layout_group_item,viewGroup,false);
}
CheckBox ck_group_choosed = view.findViewById(R.id.ck_group_choosed);
ck_group_choosed.setText(data.get(groupPosition).getSellerName());
if(data.get(groupPosition).isGroupChoosed()){
ck_group_choosed.setChecked(true);
}else{
ck_group_choosed.setChecked(false);
}
//ck_group_choosed.setChan
ck_group_choosed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkGroupItemListener.checkGroupItem(groupPosition,((CheckBox)view).isChecked());
}
});
return view;
}
@Override
public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
if(view==null){
view=LayoutInflater.from(context).inflate(R.layout.layout_child_item,viewGroup,false);
}
//商品选择
CheckBox ck_child_choosed = view.findViewById(R.id.ck_child_choose);
//商品图片
ImageView iv_show_pic = view.findViewById(R.id.iv_show_pic);
//商品主标题
TextView tv_commodity_name = view.findViewById(R.id.tv_commodity_name);
//商品副标题
TextView tv_commodity_attr = view.findViewById(R.id.tv_commodity_attr);
//商品价格
TextView tv_commodity_price = view.findViewById(R.id.tv_commodity_price);
//商品数量
TextView tv_commodity_num = view.findViewById(R.id.tv_commodity_num);
//商品减
TextView iv_sub = view.findViewById(R.id.iv_sub);
//商品加减中的数量变化
final TextView tv_commodity_show_num = view.findViewById(R.id.tv_commodity_show_num);
//商品加
TextView iv_add = view.findViewById(R.id.iv_add);
//删除按钮
Button btn_commodity_delete = view.findViewById(R.id.btn_commodity_delete);
//设置文本信息
tv_commodity_name.setText(data.get(i).getList().get(i1).getTitle());
tv_commodity_attr.setText(data.get(i).getList().get(i1).getSubhead());
tv_commodity_price.setText("¥"+data.get(i).getList().get(i1).getPrice());
tv_commodity_num.setText("x"+data.get(i).getList().get(i1).getNum());
tv_commodity_show_num.setText(data.get(i).getList().get(i1).getNum()+"");
//分割图片地址
String images = data.get(i).getList().get(i1).getImages();
String[] urls = images.split("\\|");
//加载商品图片
Glide.with(context)
.load(urls[0])
.crossFade()
.into(iv_show_pic);
//商品加
iv_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
modifyGoodsItemNumberListener.doIncrease(i,i1,tv_commodity_show_num);
}
});
//设置商品加减的按钮
//商品减
iv_sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
modifyGoodsItemNumberListener.doDecrease(i,i1,tv_commodity_show_num);
}
});
//商品复选框是否被选中
ck_child_choosed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//isChecked false true
checkGroupItemListener.checkChildItem(i,i1,((CheckBox)view).isChecked());
}
});
//处理商品的选中状态
if(data.get(i).getList().get(i1).isChildChoosed()){
ck_child_choosed.setChecked(true);
}else{
ck_child_choosed.setChecked(false);
}
//控制删除按钮的隐藏与显示
if(isEditor){
btn_commodity_delete.setVisibility(View.VISIBLE);
}else{
btn_commodity_delete.setVisibility(View.GONE);
}
return view;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return false;
}
public interface CheckGroupItemListener{
//商家的条目的复选框监听
void checkGroupItem(int groupPosition, boolean isChecked);
//商品的
void checkChildItem(int groupPosition, int childPosition, boolean isChecked);
}
/**
* 商品加减接口
*/
public interface ModifyGoodsItemNumberListener{
//商品添加操作
void doIncrease(int groupPosition, int childPosition, View view);
//商品减少操作
void doDecrease(int groupPosition, int childPosition, View view);
}
}
ShoppCarBean
package comz.example.zld.zhanglingdan20180531.tuer; import java.util.List; public class ShoppCarBean { /** * msg : 请求成功 * code : 0 * data : */ private String msg; private String code; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { /** * list : * sellerName : 商家1 * sellerid : 1 */ private String sellerName; private String sellerid; private List<ListBean> list; //商家是否被选中 组条目是否被选中 private boolean isGroupChoosed; public boolean isGroupChoosed() { return isGroupChoosed; } public String getSellerName() { return sellerName; } public void setSellerName(String sellerName) { this.sellerName = sellerName; } public String getSellerid() { return sellerid; } public void setSellerid(String sellerid) { this.sellerid = sellerid; } public List<ListBean> getList() { return list; } public void setList(List<ListBean> list) { this.list = list; } public void setGroupChoosed(boolean groupChoosed) { isGroupChoosed = groupChoosed; } public static class ListBean { /** * bargainPrice : 99.0 * createtime : 2017-10-14T21:38:26 * detailUrl * images :.jpg * num : 1 * pid : 45 * price : 2999.0 * pscid : 39 * selected : 0 * sellerid : 1 * subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽! * title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机 */ private double bargainPrice; private String createtime; private String detailUrl; private String images; private int num; private int pid; private double price; private int pscid; private int selected; private int sellerid; private String subhead; private String title; //子条目商品是否被选中的一个字段状态 private boolean isChildChoosed; public boolean isChildChoosed() { return isChildChoosed; } public double getBargainPrice() { return bargainPrice; } public void setBargainPrice(double bargainPrice) { this.bargainPrice = bargainPrice; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDetailUrl() { return detailUrl; } public void setDetailUrl(String detailUrl) { this.detailUrl = detailUrl; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSelected() { return selected; } public void setSelected(int selected) { this.selected = selected; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } public String getSubhead() { return subhead; } public void setSubhead(String subhead) { this.subhead = subhead; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public void setChildChoosed(boolean childChoosed) { isChildChoosed = childChoosed; } } } }activity
TuEr
package comz.example.zld.zhanglingdan20180531.tuer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.List;
import butterknife.BindView;
import comz.example.zld.zhanglingdan20180531.R;
import comz.example.zld.zhanglingdan20180531.tuer.api.Apii;
import comz.example.zld.zhanglingdan20180531.tuer.mvp.SpxqPresenter;
import comz.example.zld.zhanglingdan20180531.tuer.mvp.SpxqView;
import okhttp3.ResponseBody;
public class TuEr extends AppCompatActivity implements SpxqView,MyExpandAdapter.ModifyGoodsItemNumberListener,MyExpandAdapter.CheckGroupItemListener{
@BindView(R.id.btnBack)
TextView mBtnBack;
@BindView(R.id.btnEditor)
TextView mBtnEditor;
@BindView(R.id.expandList)
ExpandableListView mExpandList;
@BindView(R.id.btnCheckAll)
CheckBox mBtnCheckAll;
@BindView(R.id.tvTotalPrice)
TextView mTvTotalPrice;
@BindView(R.id.btnAmount)
TextView mBtnAmount;
//默认是false
private boolean flag;
//购买商品的总数量
private int totalNum = 0;
//购买商品的总价
private double totalPrice = 0.00;
private List<ShoppCarBean.DataBean> list;
private MyExpandAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tu_er);
initView();
getSupportActionBar().hide();
mExpandList.setGroupIndicator(null);
SpxqPresenter spxqPresenter = new SpxqPresenter();
spxqPresenter.attachView(this);
spxqPresenter.getData(Apii.DUANZI_API, "15157");
adapter = new MyExpandAdapter(this);
mExpandList.setAdapter(adapter);
adapter.setModifyGoodsItemNumberListener(this);
//设置商家以及商品是否被选中的监听
adapter.setCheckGroupItemListener(this);
mBtnCheckAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
isChoosedAll(((CheckBox) view).isChecked());
//计算商品总价
statisticsPrice();
}
});
mBtnEditor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!flag) {//编辑 -> 完成\
flag = true;
mBtnEditor.setText("完成");
adapter.showDeleteButton(flag);
} else {
flag = false;
mBtnEditor.setText("编辑");
adapter.showDeleteButton(flag);
}
}
});
}
private void initView() {
mBtnBack = (TextView) findViewById(R.id.btnBack);
mBtnEditor = (TextView) findViewById(R.id.btnEditor);
mExpandList = (ExpandableListView) findViewById(R.id.expandList);
mBtnCheckAll = (CheckBox) findViewById(R.id.btnCheckAll);
mTvTotalPrice = (TextView) findViewById(R.id.tvTotalPrice);
mBtnAmount = (TextView) findViewById(R.id.btnAmount);
}
@Override
public void onSuccess(ResponseBody responseBody) {
try {
String string = responseBody.string();
ShoppCarBean shoppCarBean = new Gson().fromJson(string, ShoppCarBean.class);
List<ShoppCarBean.DataBean> data = shoppCarBean.getData();
this.list = data;
adapter.setList(list);
defaultExpand();
} catch (IOException e) {
e.printStackTrace();
}
}
private void defaultExpand() {
for (int i = 0; i < adapter.getGroupCount(); i++) {
mExpandList.expandGroup(i);
}
}
@Override
public void doIncrease(int groupPosition, int childPosition, View view) {
ShoppCarBean.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);
//取出当前的商品数量
int currentNum = listBean.getNum();
//商品++
currentNum++;
//将商品数量设置javabean上
listBean.setNum(currentNum);
//刷新适配器
adapter.notifyDataSetChanged();
//计算商品价格
statisticsPrice();
}
@Override
public void doDecrease(int groupPosition, int childPosition, View view) {
ShoppCarBean.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);
//取出当前的商品数量
int currentNum = listBean.getNum();
//直接结束这个方法
if (currentNum == 1) {
return;
}
currentNum--;
listBean.setNum(currentNum);
//刷新适配器
adapter.notifyDataSetChanged();
//计算商品价格
statisticsPrice();
}
@Override
public void checkGroupItem(int groupPosition, boolean isChecked) {
ShoppCarBean.DataBean dataBean = list.get(groupPosition);
dataBean.setGroupChoosed(isChecked);
//遍历商家里面的商品,将其置为选中状态
for (ShoppCarBean.DataBean.ListBean listBean : dataBean.getList()) {
listBean.setChildChoosed(isChecked);
}
//底部结算那个checkbox状态(全选)
if (isCheckAll()) {
mBtnCheckAll.setChecked(true);
} else {
mBtnCheckAll.setChecked(false);
}
//刷新适配器
adapter.notifyDataSetChanged();
//计算价格
statisticsPrice();
}
@Override
public void checkChildItem(int groupPosition, int childPosition, boolean isChecked) {
ShoppCarBean.DataBean dataBean = list.get(groupPosition);//商家那一层
List<ShoppCarBean.DataBean.ListBean> listBeans = dataBean.getList();
ShoppCarBean.DataBean.ListBean listBean = listBeans.get(childPosition);
//你点击商家的商品条目将其选中状态记录
listBean.setChildChoosed(isChecked);
//检测商家里面的每一个商品是否被选中,如果被选中,返回boolean
boolean result = isGoodsCheckAll(groupPosition);
if (result) {
dataBean.setGroupChoosed(result);
} else {
dataBean.setGroupChoosed(result);
}
//底部结算那个checkbox状态(全选)
if (isCheckAll()) {
mBtnCheckAll.setChecked(true);
} else {
mBtnCheckAll.setChecked(false);
}
//刷新适配器
adapter.notifyDataSetChanged();
//计算总价
statisticsPrice();
}
//购物车商品是否全部选中
private boolean isCheckAll() {
for (ShoppCarBean.DataBean dataBean : list) {
if (!dataBean.isGroupChoosed()) {
return false;
}
}
return true;
}
//全选与反选
private void isChoosedAll(boolean isChecked) {
for (ShoppCarBean.DataBean dataBean : list) {
dataBean.setGroupChoosed(isChecked);
for (ShoppCarBean.DataBean.ListBean listBean : dataBean.getList()) {
listBean.setChildChoosed(isChecked);
}
}
//刷新适配器
adapter.notifyDataSetChanged();
}
/**
* 检测某个商家的商品是否都选中,如果都选中的话,商家CheckBox应该是选中状态
*/
private boolean isGoodsCheckAll(int groupPosition) {
List<ShoppCarBean.DataBean.ListBean> listBeans = this.list.get(groupPosition).getList();
//遍历某一个商家的每个商品是否被选中
for (ShoppCarBean.DataBean.ListBean listBean : listBeans) {
if (listBean.isChildChoosed()) {//是选中状态
continue;
} else {
return false;
}
}
return true;
}
private void statisticsPrice() {
//初始化值
totalNum = 0;
totalPrice = 0.00;
for (ShoppCarBean.DataBean dataBean : list) {
for (ShoppCarBean.DataBean.ListBean listBean : dataBean.getList()) {
if (listBean.isChildChoosed()) {
totalNum++;
System.out.println("number : " + totalNum);
totalPrice += listBean.getNum() * listBean.getPrice();
}
}
}
//设置文本信息 合计、结算的商品数量
mTvTotalPrice.setText("合计:¥" + totalPrice);
mBtnAmount.setText("结算(" + totalNum + ")");
}
}
接着写布局
mainActivity
<LinearLayout
android:orientation="vertical"
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">
<Button
android:id="@+id/main_button01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="图一"
/>
<Button
android:id="@+id/main_button02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="图二"
/>
</LinearLayout>
activity_sousuo
<LinearLayout
android:orientation="vertical"
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="comz.example.zld.zhanglingdan20180531.tuyi.SousuoActivity">
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recy"
></android.support.v7.widget.RecyclerView>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</LinearLayout>
activity_spxq
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
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="comz.example.zld.zhanglingdan20180531.tuyi.SpxqActivity">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/spxq_sim"
android:layout_width="match_parent"
android:layout_height="300dp" />
<TextView
android:id="@+id/spxq_textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/spxq_textView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="TextView" />
<Button
android:id="@+id/spxq_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加到购物车" />
</LinearLayout>
tuerActivity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
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="comz.example.zld.zhanglingdan20180531.tuer.TuEr">
<include layout="@layout/layout_title" />
<ExpandableListView
android:id="@+id/expandList"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ExpandableListView>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginTop="2dp"
android:background="#000000"/>
<include layout="@layout/layout_bottom" />
</LinearLayout>
tuyiActivity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
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="comz.example.zld.zhanglingdan20180531.tuyi.TuYi">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="搜索" />
<TextView
android:id="@+id/tv_sou"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="搜搜看看"
android:textSize="25dp" />
</LinearLayout>
<comz.example.zld.zhanglingdan20180531.tuyi.FlowLayout
android:id="@+id/id_flowlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:paddingTop="10dp">
</comz.example.zld.zhanglingdan20180531.tuyi.FlowLayout>
<Button
android:id="@+id/clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清空记录"/>
</LinearLayout>
layout_bottom
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全选"
android:textSize="25sp"
android:padding="10dp"
android:id="@+id/btnCheckAll"/>
<TextView
android:id="@+id/tvTotalPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:padding="10dp"
android:textColor="@android:color/black"
android:layout_weight="1"
android:gravity="center"
android:text="合计:¥0.00"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="结算(0)"
android:textColor="@android:color/white"
android:textSize="25sp"
android:padding="10dp"
android:background="@android:color/holo_red_light"
android:id="@+id/btnAmount"/>
</LinearLayout>
layout_child_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/ck_child_choose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:scaleX="0.6"
android:scaleY="0.6" />
<ImageView
android:id="@+id/iv_show_pic"
android:layout_width="70dp"
android:layout_height="80dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/ck_child_choose"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="15dp"
android:layout_toRightOf="@id/iv_show_pic"
android:orientation="vertical">
<TextView
android:id="@+id/tv_commodity_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="酒红色纯红色纯羊毛西服套装"
android:textColor="@android:color/black"
android:textSize="12sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_commodity_attr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="属性:粉蓝色"
android:textColor="@color/colorPrimary"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_commodity_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥390"
android:textColor="@android:color/holo_red_dark"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_commodity_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="x1"
android:textColor="@android:color/darker_gray" />
<LinearLayout
android:id="@+id/rl_edit"
android:layout_width="120dp"
android:layout_height="30dp"
android:layout_marginLeft="20dp"
android:background="@android:color/holo_orange_light">
<TextView
android:id="@+id/iv_sub"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="1dp"
android:layout_weight="1"
android:background="@android:color/white"
android:gravity="center"
android:text=" - "
android:textColor="@android:color/black" />
<TextView
android:id="@+id/tv_commodity_show_num"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="1dp"
android:layout_weight="1"
android:background="@android:color/white"
android:gravity="center"
android:text="1" />
<TextView
android:id="@+id/iv_add"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="1dp"
android:layout_weight="1"
android:background="@android:color/white"
android:gravity="center"
android:text=" + " />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/btn_commodity_delete"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_margin="5dp"
android:background="@android:color/holo_blue_light"
android:gravity="center"
android:text="x"
android:textColor="@android:color/holo_green_dark"
android:textSize="20sp"
android:visibility="gone" />
</LinearLayout>
layout_group_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/ck_group_choosed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商家1"
android:gravity="center_vertical"
android:textSize="25sp"
android:focusable="false"
android:padding="10dp"/>
</LinearLayout>
layout_title
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorAccent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"
android:textSize="25sp"
android:padding="10dp"
android:textColor="@android:color/white"
android:id="@+id/btnBack"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:padding="10dp"
android:textColor="@android:color/white"
android:layout_weight="1"
android:gravity="center"
android:text="购物车"/>
<TextView
android:id="@+id/btnEditor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="编辑"
android:textColor="@android:color/white"
android:textSize="25sp"
android:padding="10dp"/>
</LinearLayout>
search_label_tv
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:textColor="#FFBD"
android:textSize="14sp"
android:text="Helloworld"
>
</TextView>
sousuo_recy_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/item_simple"
android:layout_width="100dp"
android:layout_height="100dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/item_textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/item_textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
</LinearLayout>