1 导库

implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.github.bumptech.glide:glide:4.8.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.amap.api:location:4.4.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

2 加权限

<uses-permission android:name="android.permission.INTERNET"/>

--------初始化 在AndroidManifest.xml声明

package com.example.app;import android.app.Application;
import android.content.Context;public class MyApp extends Application {private static Context context;@Overridepublic void onCreate() {super.onCreate();context = this;}public static Context getContext() {return context;}
}

3 对象类(bean包)

-----------泛型

package com.example.bean;public class Result<T> {/*** msg : 查询成功* code : 0* data : []*/private String msg;private String code;private T 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 T getData() {return data;}public void setData(T data) {this.data = data;}
}

----------------用到的对象类

package com.example.bean;import java.util.List;public class GoodsBean {/*** list : [{"bargainPrice":111.99,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":8,"pid":11,"price":8989,"pscid":1,"selected":0,"sellerid":4,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}]* sellerName : 商家4* sellerid : 4*/private String sellerName;private String sellerid;private List<ListBean> list;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 static class ListBean {/*** bargainPrice : 111.99* createtime : 2017-10-14T21:48:08* detailUrl : https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends* images : https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg* num : 8* pid : 11* price : 8989* pscid : 1* selected : 0* sellerid : 4* subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下* title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g*/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 checked;public boolean isChecked() {return checked;}public void setChecked(boolean checked) {this.checked = checked;}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;}}
}

4 MVP 用到的类

----------------工具类---okhttp读取网络数据

package com.example.utils;import java.io.IOException;import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class HttpUtils {private static HttpUtils httpUtils = new HttpUtils();private HttpUtils() {}public static HttpUtils getHttpUtils() {synchronized (httpUtils){if (httpUtils == null){httpUtils = new HttpUtils();}}return httpUtils;}public String get(String url){OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new LoggingInterceptor())//日志拦截器.connectTimeout(10, TimeUnit.SECONDS)//连接超时.readTimeout(10,TimeUnit.SECONDS)//读取超时.writeTimeout(10,TimeUnit.SECONDS)//写入超时.build();Request request = new Request.Builder().url(url).get().build();try {Response response = okHttpClient.newCall(request).execute();return response.body().string();} catch (IOException e) {e.printStackTrace();}return null;}
}

------日志拦截器

package com.example.utils;import android.util.Log;import java.io.IOException;import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;/*** @author dingtao* @date 2018/12/19 5:12 PM** 打印OKHttp请求日志*/
public class LoggingInterceptor implements Interceptor {@Overridepublic Response intercept(Chain chain) throws IOException {//这个chain里面包含了request和response,所以你要什么都可以从这里拿Request request = chain.request();long t1 = System.nanoTime();//请求发起的时间Log.i("dt",String.format("发送请求 %s on %s%n%s",request.url(), chain.connection(), request.headers()));Response response = chain.proceed(request);long t2 = System.nanoTime();//收到响应的时间//这里不能直接使用response.body().string()的方式输出日志//因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一//个新的response给应用层处理ResponseBody responseBody = response.peekBody(1024 * 1024);Log.i("dt",String.format("接收响应: [%s] %n返回json:【%s】 %.1fms%n%s",response.request().url(),responseBody.string(),(t2 - t1) / 1e6d,response.headers()));return response;}
}

--------------------接口类

package com.example.core;import com.example.bean.Result;public interface BaseCore<T> {void loadSuccess(T data);void loadError(Result result);
}

商品接口

package com.example.core;public interface GoodsCallback {void addAction();void reduceGood();void itmeChecked();
}

---------------MVP----p层

package com.example.presenter;import android.os.AsyncTask;import com.example.bean.Result;
import com.example.core.BaseCore;public abstract class BasePresenter {private  BaseCore baseCore;public BasePresenter(BaseCore baseCore) {this.baseCore = baseCore;}public void unBaseCore(){baseCore = null;}public void readData(Object... strings){new MyTask().execute(strings);}class MyTask extends AsyncTask<Object,Void,Result>{@Overrideprotected Result doInBackground(Object... strings) {Result result = onModel(strings);return result;}@Overrideprotected void onPostExecute(Result result) {super.onPostExecute(result);if (result.getCode().equals("0")){baseCore.loadSuccess(result.getData());}else {baseCore.loadError(result);}}}public abstract Result onModel(Object... strings);
}

-----------具体使用继承

package com.example.presenter;import com.example.bean.Result;
import com.example.core.BaseCore;
import com.example.model.BaseModel;public class GoodsPresenter extends BasePresenter {public GoodsPresenter(BaseCore baseCore) {super(baseCore);}@Overridepublic Result onModel(Object... strings) {String uid= (String) strings[0];Result result = BaseModel.LoadData(uid);return result;}}

---------------MVP----------M层

package com.example.model;import android.util.Log;import com.example.bean.GoodsBean;
import com.example.bean.Result;
import com.example.utils.HttpUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import java.lang.reflect.Type;
import java.util.List;public class BaseModel {private static final String TAG = "BaseModel========";public static Result LoadData(String uid) {String url = "http://www.zhaoapi.cn/product/getCarts?uid="+uid;HttpUtils httpUtils = HttpUtils.getHttpUtils();String json = httpUtils.get(url);Log.i(TAG, "LoadData: "+json);Gson gson = new Gson();Type type = new TypeToken<Result<List<GoodsBean>>>() {}.getType();Result result = gson.fromJson(json, type);return result;}
}

------------MVP--------------V层(MainActivity)

package com.example.my_shopp;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;import com.example.adapter.NormalAdapter;
import com.example.bean.GoodsBean;
import com.example.bean.Result;
import com.example.core.BaseCore;
import com.example.presenter.GoodsPresenter;import java.util.List;import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;public class MainActivity extends AppCompatActivity implements BaseCore ,NormalAdapter.FoodActionCheck {@BindView(R.id.recycler)RecyclerView recycler;@BindView(R.id.checkbox)CheckBox checkbox;@BindView(R.id.text_sum)TextView textSum;@BindView(R.id.but_sum)Button butSum;private GoodsPresenter presenter;private double sum;private int num;private List<GoodsBean> list;private NormalAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);presenter = new GoodsPresenter(this);presenter.readData(71+"");LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);recycler.setLayoutManager(linearLayoutManager);}@OnClick(R.id.but_sum)public void onViewClicked() {}@Overridepublic void loadSuccess(Object data) {list = (List<GoodsBean>) data;adapter = new NormalAdapter(this);adapter.setmDatas(list);adapter.setContext(this);recycler.setAdapter(adapter);checkbox.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {boolean b=checkbox.isChecked();for (int i = 0; i < list.size(); i++) {for (int j = 0; j < list.get(i).getList().size(); j++) {list.get(i).getList().get(j).setChecked(b);}}if (b){getSum();}else {textSum.setText("¥0.0");butSum.setText("去结算(0)");}adapter.notifyDataSetChanged();}});}@Overridepublic void loadError(Result result) {Toast.makeText(this, result.getMsg(), Toast.LENGTH_SHORT).show();}private void getSum() {sum=0;num=0;for (int i = 0; i < list.size(); i++) {for (int j = 0; j < list.get(i).getList().size(); j++) {if ( list.get(i).getList().get(j).isChecked()){Log.i("++++++++++++", "getSum: "+list.get(i).getList().get(j).getNum()*list.get(i).getList().get(j).getPrice());Log.i("++++++++++++", "getSum: "+list.get(i).getList().get(j).getNum());sum+= list.get(i).getList().get(j).getNum()*list.get(i).getList().get(j).getPrice();num+= list.get(i).getList().get(j).getNum();}}}textSum.setText("¥"+sum+"");butSum.setText("去结算("+num+")");}@Overridepublic void checked() {getSum();int pd=0;for (int i = 0; i < list.size(); i++) {for (int j = 0; j < list.get(i).getList().size(); j++) {if ( list.get(i).getList().get(j).isChecked()){pd++;}}}if (pd==16){checkbox.setChecked(true);}else{checkbox.setChecked(false);}}@Overrideprotected void onDestroy() {super.onDestroy();presenter.unBaseCore();}
}

5RecyclerView适配器

---------------商铺

package com.example.adapter;import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import com.bumptech.glide.Glide;
import com.example.bean.GoodsBean;
import com.example.core.GoodsCallback;
import com.example.my_shopp.R;import java.util.List;// ① 创建Adapter
public class NormalAdapter extends RecyclerView.Adapter<NormalAdapter.VH> implements GoodsCallback {private final FoodActionCheck check;@Overridepublic void addAction() {check.checked();}@Overridepublic void reduceGood() {check.checked();}@Overridepublic void itmeChecked() {check.checked();}//② 创建ViewHolderpublic static class VH extends RecyclerView.ViewHolder{public final TextView title;public final RecyclerView recycler_itme;public VH(View v) {super(v);title =  v.findViewById(R.id.text_s_name);recycler_itme =  v.findViewById(R.id.recycler_itme);}}private List<GoodsBean> mDatas;private Context context;public Context getContext() {return context;}public void setContext(Context context) {this.context = context;}public List<GoodsBean> getmDatas() {return mDatas;}public void setmDatas(List<GoodsBean> mDatas) {this.mDatas = mDatas;}//③ 在Adapter中实现3个方法@Overridepublic void onBindViewHolder(VH holder, int position) {holder.title.setText(mDatas.get(position).getSellerName());LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);holder.recycler_itme.setLayoutManager(linearLayoutManager);NewAdapter adapter = new NewAdapter(this);adapter.setContext(context);adapter.setmDatas(mDatas.get(position).getList());holder.recycler_itme.setAdapter(adapter);holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//item 点击事件}});}@Overridepublic int getItemCount() {return mDatas.size();}@Overridepublic VH onCreateViewHolder(ViewGroup parent, int viewType) {//LayoutInflater.from指定写法View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.sellername_layout, parent, false);return new VH(v);}public interface FoodActionCheck{void checked();}public NormalAdapter(FoodActionCheck check) {this.check = check;}
}

----------配套布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="wrap_content"><TextViewandroid:id="@+id/text_s_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="30sp"android:text="店铺名"/><android.support.v7.widget.RecyclerViewandroid:id="@+id/recycler_itme"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>

---------------商品适配器

package com.example.adapter;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;import com.bumptech.glide.Glide;
import com.example.bean.GoodsBean;
import com.example.core.GoodsCallback;
import com.example.layout.MyLayout;
import com.example.my_shopp.R;import java.util.List;// ① 创建Adapter
public class NewAdapter extends RecyclerView.Adapter<NewAdapter.VH>{private final GoodsCallback goodsCallback;//② 创建ViewHolderpublic static class VH extends RecyclerView.ViewHolder{public final MyLayout my_layout;public VH(View v) {super(v);my_layout =  v.findViewById(R.id.my_layout);}}private List<GoodsBean.ListBean> mDatas;private Context context;public Context getContext() {return context;}public void setContext(Context context) {this.context = context;}public List<GoodsBean.ListBean> getmDatas() {return mDatas;}public void setmDatas(List<GoodsBean.ListBean> mDatas) {this.mDatas = mDatas;}//③ 在Adapter中实现3个方法@Overridepublic void onBindViewHolder(VH holder, final int position) {TextView text_title= holder.my_layout.findViewById(R.id.text_title);TextView text_price= holder.my_layout.findViewById(R.id.text_price);ImageView image_itme= holder.my_layout.findViewById(R.id.image_itme);final CheckBox check_itme= holder.my_layout.findViewById(R.id.check_itme);Button but_jian = holder.my_layout.findViewById(R.id.but_jian);Button but_jia= holder.my_layout.findViewById(R.id.but_jia);EditText edit_count= holder.my_layout.findViewById(R.id.edit_count);edit_count.setText(String.valueOf(mDatas.get(position).getNum()));check_itme.setChecked(mDatas.get(position).isChecked());text_title.setText(mDatas.get(position).getTitle());text_price.setText("¥"+mDatas.get(position).getPrice());String replace = mDatas.get(position).getImages().replace("https", "http");//Log.e("===================",replace+"");//分割字符串String[] split = replace.split("!");//Log.e("===================++",split[0]);Glide.with(context).load(split[0]).into(image_itme);holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//item 点击事件}});but_jia.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {mDatas.get(position).setNum(mDatas.get(position).getNum()+1);if (check_itme.isChecked()){goodsCallback.addAction();}notifyDataSetChanged();}});but_jian.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if ( 0 == mDatas.get(position).getNum()) return;mDatas.get(position).setNum(mDatas.get(position).getNum()-1);if (check_itme.isChecked()){goodsCallback.reduceGood();}notifyDataSetChanged();}});check_itme.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {mDatas.get(position).setChecked(check_itme.isChecked());goodsCallback.itmeChecked();}});}@Overridepublic int getItemCount() {return mDatas.size();}@Overridepublic VH onCreateViewHolder(ViewGroup parent, int viewType) {//LayoutInflater.from指定写法View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.i_layout, parent, false);return new VH(v);}public NewAdapter(GoodsCallback goodsCallback) {this.goodsCallback= goodsCallback;}
}

----------配套布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="wrap_content"><com.example.layout.MyLayoutandroid:id="@+id/my_layout"android:layout_width="match_parent"android:layout_height="match_parent"></com.example.layout.MyLayout>
</LinearLayout>

6自定义商品条目布局

package com.example.layout;import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import com.example.my_shopping.R;public class MyLayout extends LinearLayout{public MyLayout(Context context) {super(context);initView();}public MyLayout(Context context, @Nullable AttributeSet attrs) {super(context, attrs);initView();}public MyLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initView();}private void initView(){View view = View.inflate(getContext(), R.layout.itme_layout,this);}}

----------配合布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:gravity="center_vertical"android:layout_height="150dp"><CheckBoxandroid:id="@+id/check_itme"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/image_itme"android:layout_width="100dp"android:layout_height="100dp"android:adjustViewBounds="true"android:src="@mipmap/ic_launcher"/><RelativeLayoutandroid:layout_width="0dp"android:layout_weight="3"android:layout_height="80dp"><TextViewandroid:id="@+id/text_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textStyle="bold"android:text="标题"/><TextViewandroid:id="@+id/text_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textStyle="bold"android:textColor="#f00"android:text="¥124.0"android:layout_alignParentBottom="true"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_height="wrap_content"><Buttonandroid:id="@+id/but_jian"android:layout_width="40dp"android:layout_height="wrap_content"android:text="—"/><EditTextandroid:id="@+id/edit_count"android:layout_width="wrap_content"android:gravity="center"android:layout_height="wrap_content"android:textColor="#f00"android:inputType="number"android:text="0" /><Buttonandroid:id="@+id/but_jia"android:layout_width="40dp"android:layout_height="wrap_content"android:text="+"/></LinearLayout></RelativeLayout></LinearLayout>

7 主界面展示布局

<?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:orientation="vertical"android:layout_height="match_parent"tools:context=".MainActivity"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recycler"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"></android.support.v7.widget.RecyclerView><LinearLayoutandroid:layout_width="match_parent"android:gravity="center_vertical"android:layout_height="wrap_content"><CheckBoxandroid:id="@+id/checkbox"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="全选"/><TextViewandroid:id="@+id/text_sum"android:layout_width="0dp"android:layout_weight="2"android:layout_height="wrap_content"android:textStyle="bold"android:textSize="20sp"android:text="合计:¥0.0"/><Buttonandroid:id="@+id/but_sum"android:layout_width="0dp"android:layout_weight="2"android:layout_height="wrap_content"android:textColor="#fff"android:background="#f00"android:textSize="20sp"android:text="去结算(0)"/></LinearLayout>
</LinearLayout>

RecyclerView嵌套实现购物车相关推荐

  1. Android中RecyclerView嵌套RecyclerView或嵌套ListView

    Android中RecyclerView嵌套RecyclerView或嵌套ListView

  2. RecyclerView嵌套TextView时显示文字不全的解决方法之一

    先描述一下这个小bug:简单的TextView嵌套RecyclerView作为itemView时,可能会在文本中出现布局覆盖的现象,itemView的布局其实很简单,就是一个RelativeLayou ...

  3. 分组(recyclerview嵌套)

    效果 分包方式 重要代码 recyclerview嵌套recyclerview 适配器(大的适配器嵌套子适配器) package com.jia.dividegroups.adapt; import ...

  4. Recyclerview嵌套Recyclerview,条目显示不全和宽度不能铺满不能同时满足

    参考了: RecyclerView常见问题解决方案,RecyclerView嵌套自动滚动,RecyclerView 高度设置wrap_content 无作用等问题 - 邱石的专栏 - CSDN博客   ...

  5. 你应该看得懂的RecyclerView嵌套

    第一篇博客,也许会写得很粗糙,但我会尽量详细地讲述我将要讲的知识,如有不足之处,请大家留言,我尽力解答. 大家好,我是Chentyit,一个被同学称为用生命在逗比的人,所以,我尽量用轻快的语言来描述接 ...

  6. SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView 嵌套,最后一项显示全

    SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView 嵌套,导致RecyclerView ...

  7. android view嵌套,Android RecyclerView嵌套RecyclerView点击事件

    RecyclerView嵌套RecyclerView点击事件遇到取值错乱的问题 其实问题根本就是咱们没有处理好被嵌套的那层recycleview的position 那么解决思路也很简单,想办法把被嵌套 ...

  8. NestedScrollView + RecyclerView 嵌套产生卡顿处理

    特别说明: 对于NestedScrollView嵌套RecylcerView不建议在数据量很大的情况下使用,因为这种嵌套会导致RecyclerView的item被展开,导致复用失效. 在使用Neste ...

  9. Android RecyclerView嵌套EditView实时更新Item数据

    一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...

最新文章

  1. 终于恢复了珍惜多年的照片
  2. linux core文件的打开和分析
  3. sql 计算 某字段 不同值出现 的次数_教你如何合理选用和计算电线规格,电线回路分配和注意事项...
  4. Java内存区域(运行时数据区域)和内存模型(JMM)
  5. 开启Mysql远程登录账号
  6. ClickHouse在字节跳动推荐和广告业务部门的最佳实践
  7. C语言宏的高级应用-转
  8. MySQL incompatible with sql_mode=only_full_group_by 问题解决
  9. SQL 从入门到精通
  10. 电感的两种模式——DCM和CCM的区别
  11. js函数式编程之柯里化(curry)
  12. GDOI2017滚粗记
  13. 008 使用MyBatis,easyUI实现CRUD操作样例-CUD(CRUD完毕)
  14. c语言求最小公倍数和最大公约数三种算法
  15. bazel成功安装后,编译代码报错
  16. 十四届蓝桥青少组模拟赛Python-20221108
  17. 诸葛告诉你如何用数据来做渠道效果的分析
  18. When OOP Becomes POO
  19. Nacos2.0启动报错:Your project setup is incompatible with our requirements due to following reasons:
  20. PreScan快速入门到精通第二十六讲PreScan中常用传感器之Beacon和OBU

热门文章

  1. potatso lite怎么添加代理_「科技犬」除了苹果AirPods,真无线蓝牙耳机到底怎么选?_蓝牙耳机...
  2. 陕师大计算机好就业吗,陕师大是好学校吗?陕师大出来好不好就业?
  3. 作为字节跳动面试官,有些话我不得不说!
  4. VSCode:python import下载的第三方库,报错问题解决
  5. chrome html导出pdf,使用Selenium实现HTML转PDF
  6. 【HTTP】如何避免OPTIONS请求?
  7. change()事件及val()/html()方法不会触发change事件
  8. 回收垃圾字符的3种方法
  9. 关于f(tx,ty)=t^nf(x,y)的学习
  10. 西电计算机学院2019年复试线,2021西安电子科技大学研究生分数线一览表(含2019 2020历年复试)...