如何从Fragment的TextView打开URL?空指针异常排查
解决你的Fragment中TextView链接的NullPointerException问题
嘿,我一眼就揪出了导致你遇到NPE的两个问题,咱们一步步来修复:
1. 核心问题:getView()调用时机完全错了
在onCreateView方法里,你还没返回rootView就调用getView()——这时候Fragment的视图还没被系统关联,getView()会直接返回null!用它去findViewById得到的t2肯定是null,虽然你加了判空,但等于白忙活,链接的点击逻辑根本没生效,还埋下了NPE的隐患(要是没判空直接操作就直接炸了)。
修复方案:用你刚inflate出来的rootView查找控件,它才是当前Fragment的视图根节点。
修正后的Fragment代码:
public class About_us extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_about_us, container, false); // 改用rootView查找控件,而非getView() TextView t2 = rootView.findViewById(R.id.read_more); if (t2 != null) { t2.setMovementMethod(LinkMovementMethod.getInstance()); } return rootView; } }
2. 次要问题:URL缺少协议头
你strings.xml里的链接写的是www.google.com/,没有加https://或http://——就算修复了第一个问题,系统也识别不出这是合法URL,点击后不会跳转。
修复方案:给URL补上协议头:
<string name="link_to_the_website"><a href="https://www.google.com/">Read More Here</a></string>
另外补充个小细节:布局里的android:clickable="true"可以去掉,因为LinkMovementMethod会自动处理链接的点击事件,留着也不影响,但去掉更简洁。
这样修改后,你的“Read More”链接就能正常显示并点击跳转,也不会再出现NullPointerException啦~
内容的提问来源于stack exchange,提问作者CuriousPaul
相关产品推荐
相关产品推荐

