android 疑难杂症

本文汇集本人开发要解决一些疑难杂症的代码集合,方便以后自己要用到的时候又跑去搜索解决,只需要来这里 Ctrl + F 搜索一下关键即可。本文也含有来自各前辈的经验,也不记得是谁的链接看到的了,如有知道,则提示一下补全。感谢!!!

RecyclerView 边缘渐变效果

requiresFadingEdge 属性:

  • none(边框颜色不变)
  • horizontal(水平方向颜色变淡)
  • vertical(垂直方向颜色变淡)
  • fadingEdgeLength:用来设置边框渐变的长度
<android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:requiresFadingEdge="vertical"
        android:fadingEdgeLength="30dp"/>

如果只要一部分,则重写 RecyclerView

重写recycleView的类,重新设置返回值。

  • getTopFadingEdgeStrength(); 重写这个方法,设置返回值是0,去掉顶部阴影;
  • getBottomFadingEdgeStrength(); 重写这个方法,设置返回值是0,去底顶部阴影
  • getLeftFadingEdgeStrength(); 重写这个方法,设置返回值是0,去掉左部阴影
  • getRightFadingEdgeStrength(); 重写这个方法,设置返回值是0,去掉右部阴影

Java 获取随机数的常用两种方式

  • new Random()
    new Random().nextInt(4);  //【0,4) 范围 :0,1,2,3 
    
  • Math.random();返回的数值是 [0.0,1.0)范围 double 型数值,由于double类数的精度很高,可以在一定程度下看做随机数,借助(int)来进行类型转换就可以得到整数随机数了
      int max=100,min=1;
      int ran2 = (int) (Math.random()*(max-min)+min); 
      System.out.println(ran2);
    

设置 RecyclerView 滚动到指定的 position item 顶部

继承 LinearSmoothScroller 类,重写 getVerticalSnapPreference() 或者 getHorizontalSnapPreference() 方法,主要看你设置的 LayoutManager 的返现,我这里是设置了竖直方向的滚动,所以我下面重写的是 getVerticalSnapPreference()。

/**
 * @author: Haegyeong
 * @date: 2021/5/9 9:29
 * @description: 设置 RecyclerView 滚动到指定的 position item 顶部
 * @version: 1.0
 */
public class LinearTopSmoothScroller extends LinearSmoothScroller {

    public LinearTopSmoothScroller(Context context) {
        super(context);
    }

    @Override
    protected int getVerticalSnapPreference() {
        return SNAP_TO_START;
    }
}

调用处代码

//设置Item 滚动到前面
mBinding.recyclerview.post(new Runnable() {
       @Override
       public void run() {
           LinearSmoothScroller smoothScroller = new LinearTopSmoothScroller(getContext());
           smoothScroller.setTargetPosition(mAdapter.getFooterViewPosition());
           layoutManager.startSmoothScroll(smoothScroller);
       }
   });

记录一个懵逼 3 小时的 Fragment 异常。

java.lang.IllegalArgumentException: No view found for id 0x7f09012b (com.xxx.abc:id/flContainer) for fragment CommentsLikeFragment{c4cef62 (5951d882-b5db-43d4-9e90-740e067241d7) id=0x7f09012b like}

一般看到提示 No view found for id 0x7f09012b (com.xxx.abc:id/flContainer) for fragment CommentsLikeFragment 那就是找不到 Fragment 的容器ID。
也就是 fragmentTransaction.add( containerViewId, commentFragment, "recommend") ,正常的在 FragmentActivity 或者 Fragment 使用,只要你 对应上 View 布局的容器 id ,就不会报错了。

因为业务需求的功能需要,我在 RecyclerView 的 Item上使用了(在尾部的 FooterView 添加了评论列表),然后一直报这个错误,搞的我都怀疑人生,写了几年都是这样的写法,怎么突然就错了呢,怎么百度、Google 都是说和布局上的容器 Id 对应不上,复制粘贴几十次,都依旧有问题,后面才发现是因为进来页面的时候,因为是添加在 RecyclerView 的 item 中,而进来页面的时候,RecyclerView 的 Item 也还没有 Attach 到 Window上,所以 FragmentContainer 还没找到这个 id,异常就爆出了该异常。

解决方案

//注意:先把 Fragment 添加到 Transaction 中,先不用 commit 
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction()
                .add(footerBinding.flCommentContainer.getId(), commentFragment, "recommend");

然后,使用 addOnAttachStateChangeListener 方法来监听 View 的 attach 状态,只要 view Attach 到 Window 窗口,那么就 调用 fragmentTransaction.commit(); 来提交本次 Fragment 添加,即可成功解决问题。

footerBinding.getRoot().addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
            @Override
            public void onViewAttachedToWindow(View v) {
                footerBinding.getRoot().removeOnAttachStateChangeListener(this);
                if (!commentFragment.isAdded() || !likeFragment.isAdded()) {
                    fragmentTransaction.commit();
                }
            }

            @Override
            public void onViewDetachedFromWindow(View v) {
            }
        });

插件版本与Gradle 对应版本号

image.png

ViewGroup 隐藏显示 View 开启动画,只需要 ViewGroup 添加以下代码就可以了。

android:animateLayoutChanges="true"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容