view里明明定义了对应控件ID,为什么还找不到

背景:

项目中有两个app工程(暂命名为A和B),共同依赖一个common工程。原先有个activity在B工程中,因需要变成A和B公用,所以将此activity移到common工程中。

问题描述:

运行B工程时,正常;但是运行A工程时,直接闪退。报错信息如下:


2018-10-15 15:32:02.148 19895-19895/com.test E/Tinker.UncaughtHandler: UncaughtHandler catch exception:java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSequence)’ on a null object reference
at com.TestFragment.onViewCreated(CargoFragment.java:89)

原因分析:

1.此activity处于两个工程共同依赖的工程中,按理说在B工程正常,那再A工程也应该正常。不明白为什么对应的viewId在A工程时,就出现找不到的情况。
2.另外发现一个奇怪的现象:A工程和B工程分别调用时,查看activity里view下的子view的数量,竟然不一样。
3.后来在同事的帮助下,终于找到问题原因。在A工程中存在和common工程中acvitiy所用布局文件一样名字的文件。

解决方案:

修改common工程中acvitity所用布局文件名称,同时排查其他资源是否也存在此类问题。
对于此类工程间资源冲突覆盖问题,应参考规范安卓模块内资源命名,避免多模块打包出现资源冲突

安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061

### Android 应用中控件不可见的原因及解决方案 #### 1. 可视属性设置错误 如果控件的 `android:visibility` 属性被设为了 `gone` 或者 `invisible`,那么该控件将不会显示。默认情况下,所有未指定此属性的控件都将是可见状态(即 `visible`)。因此,在布局文件中检查并确认控件的可视属性是否正确配置是非常重要的[^1]。 ```xml <!-- 正确的方式 --> <View android:id="@+id/myView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <!-- 错误的方式 --> <View android:id="@+id/myView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone"/> <!-- 这会使控件消失 --> ``` #### 2. 布局参数不当影响子项展示 对于像 RecyclerView 这样的容器类组件,当其内部 item 的尺寸定义不合理时可能会导致部分 items 显示不完全甚至无法看到某些特定位置上的 views。确保给定合适的宽度和高度值可以帮助改善这一状况;另外,适当调整父级 ViewGroup 中关于焦点获取行为的相关设定也有助于提高用户体验[^2]。 ```xml <RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants"> </RecyclerView> ``` #### 3. 预览模式下的异常情况处理 有时开发者会遇到虽然在设计编辑器内一切正常但在实际设备上却看不到预期效果的情况。这可能是由于 IDE 缓存或其他环境因素引起的。尝试清理项目缓存、重启模拟器或真机以及更新 SDK 工具链等方式往往能有效缓解此类问题的发生频率[^3]。 #### 4. 软键盘弹出遮挡界面元素 软键盘出现后可能会影响到页面底部区域内的 UI 组件呈现方式。通过修改 Activity 的窗口特性来适应不同输入状态下屏幕空间的变化是一种常见做法。具体来说可以在清单文件 (AndroidManifest.xml) 对应 activity 标签下加入如下声明: ```xml <activity ... android:windowSoftInputMode="adjustResize|stateHidden"> </activity> ``` 此外还可以利用编程手段动态监听软键盘的状态变化从而做出相应调整[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值