Android开发过程中的坑及解决方法收录(四)
1.某个控件要放在Linearlayout布局的底部(底部导航条)
<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"
...>
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="0dp"
android:Layout_weight="2">
...//嵌套的其他布局……
</LinearLayout>
...//嵌套的其他布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
</LinearLayout>
简单说明一下,上面的代码中有一个Linearlayout,里面嵌套了两个Linearlayout
这里的关键是嵌套里面的第一个Linearlayout
布局,注意这个布局里面的这两行属性代码
`android:layout_height="0dp"`
`android:Layout_weight="2"`
第二个Linearlayout就是可以放在底部的一个Linearlayout(当然你可以写你自己的布局)
2.RecyclerView显示图片卡顿优化
思路:图片太多,显示卡顿的原因主要是因为在RecyclerView滑动的过程中同时加载网络的图片,所以卡顿。
我们实现滑动的时候不加载网络图片,当不滑动的时候再加载网络图片,这样流畅度就可以提高许多
在
RecyclerView
的Adapter(自己写的)
中添加一个判断RecyclerView
是否滑动的boolean变量isScrolling
protected boolean isScrolling = false; public void setScrolling(boolean scrolling) {
isScrolling = scrolling;
}
之后在
Adapter
里面的onBindViewHolder
方法控制加载图片@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String url = mlist.get(position).getImg().getUrl();
if (!isScrolling){
//我使用的是Ion显示图片框架
//如果不在滑动,则加载网络图片
Ion.with(holder.imageView.getContext())
.load(url)
.withBitmap()
.placeholder(R.drawable.grey)
.intoImageView(holder.imageView);
}else {
//如果在滑动,就先加载本地的资源图片
Drawable temp = holder.imageView.getResources().getDrawable(R.drawable.grey, null);
holder.imageView.setImageDrawable(temp);
} }
在相应的
Activity
中调用RecyclerView
的addOnScrollListener
方法,设置一个滑动监听器mRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 滚动静止时才加载图片资源,极大提升流畅度
adapter.setScrolling(false);
adapter.notifyDataSetChanged(); // notify调用后onBindViewHolder会响应调用
} else{
adapter.setScrolling(true);
}
super.onScrollStateChanged(recyclerView, newState);
}
});
3.ScrollView与RecyclerView滑动冲突
这里使用NestedScrollView
即可,然后设置RecyclerView
的NestedScrollingEnabled
属性为false
两种方法设置RecyclerView
的NestedScrollingEnabled
属性
- 调用`RecyclerView`的`setNestedScrollingEnabled`方法
- 在xml文件里面,把`RecyclerView`直接设置为`flase`
判断ScrollView是否滑动到底部
给ScrollView
添加一个滑动监听器,然后进行相关处理
mNestedsv.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
View view = mNestedsv.getChildAt(0);
if (mNestedsv.getHeight()+mNestedsv.getScrollY() ==view.getHeight()){
//相关提示
//相关操作
//下拉刷新,数据更新操作
//...
}
}
});
4.使用okhttp返回数据相同解决方法
看了资料,好像是respone.body().string()
只能调用一次,还有okhttp是有缓存的
使用的情景:有一个API接口,每次访问改接口,都会返回不同的json数据,但是使用okhttp,每次访问该API返回的数据都是相同
我的解决方法:
给API请求时添加参数,有些API是可以带参数的,可以修改参数,达到是不同网址的效果
5.RecyclerView数据更新
调用Adapter
的notifyDataSetChanged
方法即可
使用需要注意的是,List必须是同一个对象,调用List.addAll方法即可把另外一个同类List里面的全部数据存放进去
6.litepal无法继续添加数据
问题:打开APP,添加数据,没有如何问题,但是,继续添加则会将之前的数据覆盖,不能实现新的添加
原因是因为使用了static,新添加的对象是和之前是使用的同一个内存地址,所以添加新的数据会覆盖之前添加的数据
解决方法:new一个新的数据对象即可解决问题
7. 图片xml文件无法引用color.xml中的属性
Can't process attribute android:fillColor="@color/colorAccent"
解决方法 :在gradle文件android下添加。
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
Android开发过程中的坑及解决方法收录(四)的更多相关文章
- Android开发过程中的坑及解决方法收录(三)
bug:应用出现了 不幸运的,应用已停止的错误提示 排除问题: 1.intent接收数据的字符串不匹配 2.java常见的NullPointerException(空指针错误),可能由三个原因引起,字 ...
- Android开发过程中的坑及解决方法收录(一)
之前使用了Android Studio的插件直接为button绑定了监听器,并实现onClick方法(我的onClick方法无论点击哪一个都是要实现setcontentview这个方法设置layout ...
- Android开发过程中的坑及解决方法收录(六)
1. file.listFiles 空指针异常 最近在弄个小项目,类似一个文件管理器,需要获得手机存储里的目录之后显示,但是运行过程中出现错误,搜索了资料,得出了以下的解决办法 问题产生的原因: an ...
- Android开发过程中的坑及解决方法收录(二)
bug 1: bug描述: 无法成功地将edittext中的内容传入数据库中 bug动图: 经过: 最近写了个项目,项目要使用到SQL数据库,由于没有相关知识,便是找到了各种资料开始了自学之旅,在de ...
- Android开发过程中的坑及解决方法收录(五)
1. 导入依赖库出现错误 因为使用的sdk版本不同,使用下列代码强制使用最低版本,25.3.1就是我当前使用的版本号,根据自己的情况修改 configurations.all { resolution ...
- Android开发过程中部分报错解决方法。
初学Android,最近在使用zxing开发一个条码扫描解析的安卓项目中,遇到以下几个问题.贴出来以供参考. 1.Http请求错误 Android4.0以上要求不能把网络请求的操作放在主线程里操 ...
- Windows下虚拟机Linux(CentOS8)扩容设置 - 磁盘扩容中的坑和解决方法
摘要:[原创]转载请注明作者Johnthegreat和本文链接 由于虚拟机空间不足,为了避免重装虚拟机,做了一次无损扩容. 过程中的报错如下: [root@localhost ~]# pvcrea ...
- Android开发过程中使用弱引用解决内存泄露的习惯
Java虽然有垃圾回收,但是仍然存在内存泄露,比如静态变量.缓存或其他长生命周期的对象引用了其他对象,这些被引用的对象就会长期不能被GC释放,导致内存泄露. 弱引用(WeakReference)是解决 ...
- 关于在Android或Java中精度缺失的解决方法
left,right是两个String类型的字符串,myres是一个double类型的变量. 如果我们用下面的语句把left,right先转换为double后直接加法的话,如果作3.3乘3之类的运算( ...
随机推荐
- 三、糖醋鲤鱼(Sweet and sour carp)
糖醋鲤鱼是用鲤鱼制作的一道山东济南传统名菜,为鲁菜的代表菜品之一 ,色泽金黄,外焦内嫩,酸甜可口,香鲜味美. 菜品历史 <诗经>载:岂食其鱼,必河之鲤.<济南府志>上早有&qu ...
- cadence布线完成后的补充操作
完成布线之后,需要生成光绘文件和钻孔文件,在生成钻孔文件之前,还有几点补充!
- mvc根据绝对路径下载文件
首先页面需要一个a标签直接指向下载文件的Action并传值:图片地址,以及图片名称(记住要带后缀名的). 然后是Action里面的代码. SiteHelper.DownloadFile(fileUrl ...
- Spring源码学习相关记录
Spring单例实现: protected Object getSingleton(String beanName, boolean allowEarlyReference) { Object sin ...
- 控件包含代码块(即 <% ... %>),因此无法修改控件集合。
原因分析:在head里写的js代码中包含了<%=...%>代码 解决:把js的代码放到body中...
- 算法与数据结构(十) 二叉排序树的查找、插入与删除(Swift版)
在上一篇博客中,我们主要介绍了四种查找的方法,包括顺序查找.折半查找.插入查找以及Fibonacci查找.上面这几种查找方式都是基于线性表的查找方式,今天博客中我们来介绍一下基于二叉树结构的查找,也就 ...
- [Swift]LeetCode274.H指数 | H-Index
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- linux入门--类UNIX系统详解
有人说,这个世界上只有两种操作系统: UNIX 和类 UNIX 操作系统: 其它操作系统. 类 UNIX 系统(英文 Unix-like)既包括各种传统的 UNIX 系统,比如 FreeBSD.Ope ...
- JVM基础系列第10讲:垃圾回收的几种类型
我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间 ...
- java基础(十七)----- 浅谈Java中的深拷贝和浅拷贝 —— 面试必问
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...