1.某个控件要放在Linearlayout布局的底部(底部导航条)

  1. <LinearLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:orientation="vertical"
  7. android:layout_height="match_parent"
  8. ...>
  9. <LinearLayout
  10. android:layout_width="match_parent"
  11. android:orientation="vertical"
  12. android:layout_height="0dp"
  13. android:Layout_weight="2">
  14. ...//嵌套的其他布局……
  15. </LinearLayout>
  16. ...//嵌套的其他布局
  17. <LinearLayout
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content">
  20. </LinearLayout>
  21. </LinearLayout>

简单说明一下,上面的代码中有一个Linearlayout,里面嵌套了两个Linearlayout

这里的关键是嵌套里面的第一个Linearlayout布局,注意这个布局里面的这两行属性代码

  1. `android:layout_height="0dp"`
  2. `android:Layout_weight="2"`

第二个Linearlayout就是可以放在底部的一个Linearlayout(当然你可以写你自己的布局)

2.RecyclerView显示图片卡顿优化

思路:图片太多,显示卡顿的原因主要是因为在RecyclerView滑动的过程中同时加载网络的图片,所以卡顿。

我们实现滑动的时候不加载网络图片,当不滑动的时候再加载网络图片,这样流畅度就可以提高许多

  1. RecyclerViewAdapter(自己写的)中添加一个判断RecyclerView是否滑动的boolean变量isScrolling

    1. protected boolean isScrolling = false;
    2. public void setScrolling(boolean scrolling) {
    3. isScrolling = scrolling;
    4. }
  2. 之后在Adapter里面的onBindViewHolder方法控制加载图片

    1. @Override
    2. public void onBindViewHolder(ViewHolder holder, int position) {
    3. String url = mlist.get(position).getImg().getUrl();
    4. if (!isScrolling){
    5. //我使用的是Ion显示图片框架
    6. //如果不在滑动,则加载网络图片
    7. Ion.with(holder.imageView.getContext())
    8. .load(url)
    9. .withBitmap()
    10. .placeholder(R.drawable.grey)
    11. .intoImageView(holder.imageView);
    12. }else {
    13. //如果在滑动,就先加载本地的资源图片
    14. Drawable temp = holder.imageView.getResources().getDrawable(R.drawable.grey, null);
    15. holder.imageView.setImageDrawable(temp);
    16. }
    17. }
  3. 在相应的Activity中调用RecyclerViewaddOnScrollListener方法,设置一个滑动监听器

    1. mRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
    2. @Override
    3. public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    4. if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 滚动静止时才加载图片资源,极大提升流畅度
    5. adapter.setScrolling(false);
    6. adapter.notifyDataSetChanged(); // notify调用后onBindViewHolder会响应调用
    7. } else{
    8. adapter.setScrolling(true);
    9. }
    10. super.onScrollStateChanged(recyclerView, newState);
    11. }
    12. });

3.ScrollView与RecyclerView滑动冲突

这里使用NestedScrollView即可,然后设置RecyclerViewNestedScrollingEnabled属性为false

两种方法设置RecyclerViewNestedScrollingEnabled属性

  1. - 调用`RecyclerView``setNestedScrollingEnabled`方法
  2. - xml文件里面,把`RecyclerView`直接设置为`flase`

判断ScrollView是否滑动到底部

ScrollView添加一个滑动监听器,然后进行相关处理

  1. mNestedsv.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
  2. @Override
  3. public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
  4. View view = mNestedsv.getChildAt(0);
  5. if (mNestedsv.getHeight()+mNestedsv.getScrollY() ==view.getHeight()){
  6. //相关提示
  7. //相关操作
  8. //下拉刷新,数据更新操作
  9. //...
  10. }
  11. }
  12. });

4.使用okhttp返回数据相同解决方法

看了资料,好像是respone.body().string()只能调用一次,还有okhttp是有缓存的

使用的情景:有一个API接口,每次访问改接口,都会返回不同的json数据,但是使用okhttp,每次访问该API返回的数据都是相同

我的解决方法:

给API请求时添加参数,有些API是可以带参数的,可以修改参数,达到是不同网址的效果

5.RecyclerView数据更新

调用AdapternotifyDataSetChanged方法即可

使用需要注意的是,List必须是同一个对象,调用List.addAll方法即可把另外一个同类List里面的全部数据存放进去

6.litepal无法继续添加数据

问题:打开APP,添加数据,没有如何问题,但是,继续添加则会将之前的数据覆盖,不能实现新的添加

原因是因为使用了static,新添加的对象是和之前是使用的同一个内存地址,所以添加新的数据会覆盖之前添加的数据

解决方法:new一个新的数据对象即可解决问题

7. 图片xml文件无法引用color.xml中的属性

Can't process attribute android:fillColor="@color/colorAccent"

解决方法 :在gradle文件android下添加。

  1. defaultConfig {
  2. vectorDrawables.useSupportLibrary = true
  3. }

Android开发过程中的坑及解决方法收录(四)的更多相关文章

  1. Android开发过程中的坑及解决方法收录(三)

    bug:应用出现了 不幸运的,应用已停止的错误提示 排除问题: 1.intent接收数据的字符串不匹配 2.java常见的NullPointerException(空指针错误),可能由三个原因引起,字 ...

  2. Android开发过程中的坑及解决方法收录(一)

    之前使用了Android Studio的插件直接为button绑定了监听器,并实现onClick方法(我的onClick方法无论点击哪一个都是要实现setcontentview这个方法设置layout ...

  3. Android开发过程中的坑及解决方法收录(六)

    1. file.listFiles 空指针异常 最近在弄个小项目,类似一个文件管理器,需要获得手机存储里的目录之后显示,但是运行过程中出现错误,搜索了资料,得出了以下的解决办法 问题产生的原因: an ...

  4. Android开发过程中的坑及解决方法收录(二)

    bug 1: bug描述: 无法成功地将edittext中的内容传入数据库中 bug动图: 经过: 最近写了个项目,项目要使用到SQL数据库,由于没有相关知识,便是找到了各种资料开始了自学之旅,在de ...

  5. Android开发过程中的坑及解决方法收录(五)

    1. 导入依赖库出现错误 因为使用的sdk版本不同,使用下列代码强制使用最低版本,25.3.1就是我当前使用的版本号,根据自己的情况修改 configurations.all { resolution ...

  6. Android开发过程中部分报错解决方法。

    初学Android,最近在使用zxing开发一个条码扫描解析的安卓项目中,遇到以下几个问题.贴出来以供参考. 1.Http请求错误    Android4.0以上要求不能把网络请求的操作放在主线程里操 ...

  7. Windows下虚拟机Linux(CentOS8)扩容设置 - 磁盘扩容中的坑和解决方法

    摘要:[原创]转载请注明作者Johnthegreat和本文链接 由于虚拟机空间不足,为了避免重装虚拟机,做了一次无损扩容.   过程中的报错如下: [root@localhost ~]# pvcrea ...

  8. Android开发过程中使用弱引用解决内存泄露的习惯

    Java虽然有垃圾回收,但是仍然存在内存泄露,比如静态变量.缓存或其他长生命周期的对象引用了其他对象,这些被引用的对象就会长期不能被GC释放,导致内存泄露. 弱引用(WeakReference)是解决 ...

  9. 关于在Android或Java中精度缺失的解决方法

    left,right是两个String类型的字符串,myres是一个double类型的变量. 如果我们用下面的语句把left,right先转换为double后直接加法的话,如果作3.3乘3之类的运算( ...

随机推荐

  1. cadence钻孔文件及光绘文件的生成

    完成PCB布线之后,需要生成钻孔文件和光绘文件交给PCB厂家制作PCB板,下面总结详细方法!

  2. python从入门到实践-5章if语句

    #!/user/bin/env python cars = ['audi','bmw','subaru','toyota']for car in cars: if car == 'bmw': prin ...

  3. QEMU KVM Libvirt(12): Live Migration

    由于KVM的架构为 Libvirt –> qemu –> KVM 所以对于live migration有两种方式,一种是qemu + KVM自己的方式,一种是libvirt的方式,当然li ...

  4. Swift 对象内存模型探究(一)

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/zIkB9KnAt1YPWGOOwyqY3Q 作者:王 ...

  5. 高效求a的n次幂的算法

    代码: public class A的N次幂 { public static void main(String[] args) { int a = 2; int n = 60; long t = Sy ...

  6. [Swift]LeetCode47. 全排列 II | Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  7. [Swift]LeetCode790. 多米诺和托米诺平铺 | Domino and Tromino Tiling

    We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...

  8. php中mysqli_fetch_assoc()和mysqli_fetch_row()的区别

    mysqli_fetch_assoc() 函数 从结果集中取得一行作为关联数组: <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_ ...

  9. flink metric库的使用和自定义metric-reporter

    简单介绍 flink内部实现了一套metric数据收集库. 同时flink自身系统有一些固定的metric数据, 包括系统的一些指标,CPU,内存, IO 或者各个task运行的一些指标.具体包含那些 ...

  10. Python内置函数(24)——frozenset

    英文文档: class frozenset([iterable]) Return a new frozenset object, optionally with elements taken from ...