
Android 新手。在实现一个功能,简单来说,就是一个 静音按钮,是一个 ImageView ,点击静音按钮,无色的 icon_passive 变为 icon_active 。 我一开始用 ViewBinding ,发现,点击后,红色的 icon_active 是叠加在 icon_passive 之上的。但是 indViewById 就是替换的效果,不会叠加。想问各位大佬,ViewBinding 和 findViewById 有使用上的区别吗?在 Google/StackOverFlow 找不到理想的回答。
protected void initButtonAndEvents(){ // ImageView muteAudio = binding.ivMuteAudio; // 会出现 图像 叠加 ImageView muteAudio = getActivity().findViewById(R.id.iv_mute_audio); // 不会出现图像叠加 muteAudio.setImageDrawable(getResources().getDrawable(R.drawable.ic_mute_audio_default, null)); muteAudio.setOnClickListener(v -> { mViewModel.setIsMuteAudio(!mViewModel.getIsMuteAudio()); muteAudio.setImageDrawable(getResources().getDrawable(mViewModel.getIsMuteAudio() ? R.drawable.ic_mute_audio_active : R.drawable.ic_mute_audio_default, null)); }); } 1 Tolcol 2022-03-21 23:53:57 +08:00 可以看看 setContentView 那边,可能 ViewBinding 设置了两次? |
2 hu8245 OP @Tolcol 多谢。问题不在这里,这两个获得的 view 对象是同一个。根本原因在其他地方(后来发现切换横屏导致了这段代码执行了两次。)。thread 结束 |
3 251 2022-03-22 00:16:36 +08:00 直接学 compose API 吧。 |
4 FringJX 2022-03-22 00:25:49 +08:00 via iPhone 你直接 binding.ivmute.setxxx 这样调用呢 |
5 debuggeeker 2022-03-22 09:03:28 +08:00 在编译文件中找到布局名字 ViewBinding 的 class 这个类,看看里面的逻辑你就会明白了。 先说结论,我看过。生成的 xxxxViewBinding 这个类的代码做的事情,就是 findViewById 。 |
6 iovekkk 2022-03-22 09:31:50 +08:00 既然使用 viewbinding 了,点击事件就设置在 xml 文件中吧 android:OnClick="@{() -> click.onclick()}" 在 activity 中,创建一个 click 类,写一个成员方法即可 |
7 tuimaochang 2022-03-25 11:33:35 +08:00 以前 kotlin 还能用 kotlin-android-extensions 来实现直接用 xml 里的 id ,后来升级这玩意就废了…… |