刚刚开始学习 Android,请问一下下面这两行代码为什么会导致闪退?

2021-11-24 17:20:25 +08:00
 Features

编译通过,但是会闪退


public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if(view == null){
            holder = new ViewHolder();
            mView = LayoutInflater.from(context).inflate(R.layout.grid_item,viewGroup,false);
            holder.img  = (ImageView) mView.findViewById(R.id.icon_item);
            holder.title = (TextView) mView.findViewById(R.id.icon_text);
        }else{
            holder = (ViewHolder) mView.getTag();
        }

        //这两行会导致闪退
        holder.img.setImageResource(arr.get(i).getRid());
        holder.title.setText(arr.get(i).getTitle());

        Log.e("myapp","abc");

        return mView;
    }
6454 次点击
所在节点    Android
32 条回复
Features
2021-11-24 18:27:37 +08:00
@youxiachai 我是找了个视频,看了视频以后,做完视频的练习
再自己找一些练习做的,纯看教程我有点吃力,学不动的感觉
等我学完基础,肯定会去官网做一遍,巩固下
可能这就是学渣吧😂
学新知识都要学几回才能掌握
youxiachai
2021-11-24 18:28:46 +08:00
@Features google 官方有专门针对新手的视频... 完整的一套最新,没必要看这种过时的资料
a4390509
2021-11-24 19:29:51 +08:00
不崩溃是因为数据少,item 没有填充满一个屏幕,所以 view 没有复用,所以逻辑走到了 view==null 的逻辑分支里面。

崩溃是因为 view 复用了,但是你没有在 view 创建的时候 setTag ,所以在 else 逻辑分支里面获取的时候 getTag 是个空的
ykrank
2021-11-24 19:53:48 +08:00
八年老 Android ,从 Android2.0 适配起,建议你不要学客户端了。历史知识太多,真要靠这个吃饭,现在既要精通 Android ,又要精通 JVM ,各种常用的第三方框架源码都得看。最新代码基本都是 kotlin 。google 官方的推荐框架换了一茬又一茬,每次学习都是新架构。但是你要维护的工程完全可能有各种历史代码,不知道历史原因的话看起来就是乱麻。
当然如果是自己写给自己玩的,那随意了,直接最新架构一把梭,完全不用在乎历史框架。不过这种情况下那也不如 google 新的 flutter ,还可以直接打包成 IOS 和 PC 端。
windyskr
2021-11-25 00:27:57 +08:00
@ykrank 真心请教现在学 Flutter 需要啥储备知识,去哪学习比较好?
caixiangyu17
2021-11-25 06:55:30 +08:00
现在学安卓直接从 kotlin 和 jetpack compose 入门吧,没有安卓面试会不问你 kotlin coroutine 的,所以别写 java 了
Features
2021-11-25 09:34:26 +08:00
@ykrank 我有 java se 和 ee 基础,所以感觉用 java 轻松点
kotlin 以后作为拓展再学习吧
xuhaoyangx
2021-11-25 10:09:01 +08:00
你真的要学 Android

直接用最新的谷歌 jetpack 的东西

Kotlin + Jetpack 一套框架

Kotlin + jetpack Compose 新的声明式 UI

flutter 也可以看看,flutter 和 compose 基本是一种思想,会一个另一个基本也差不多了。

跨平台的可以学,但别以为能解万难,凡是涉及多一点点稍微底层一点的功能、API ,都要你懂原生。

我现在做 SDK 的,遇到太多来自别的端转移动端,只会 RN Flutter weex Uniapp 等这些,水的不行。
xuhaoyangx
2021-11-25 10:09:25 +08:00
@Features 先学 kotlin
olindays
2021-11-25 18:16:59 +08:00
用《第一行代码》第三版,学习 Android 开发的同时也学了 kotlin ,我个人觉得这本书对我这种菜鸟水平的编程爱好者很友好,你不妨试试看。
stardust21
2021-11-25 21:41:31 +08:00
@ykrank 老哥中肯。
@Features 列表直接学 RV 吧,看官方文档就行: https://developer.android.google.cn/guide/topics/ui/layout/recyclerview
kujio
2021-12-07 14:10:00 +08:00
你这 holder 写的,holder 不是这么存的,也不是这么取的!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/817703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX