参考文档: Android中如何在Fragment中添加点击事件切换新的Fragment

问题描述: 在 Fragment 中,有一些控件(TextView)是需要动态赋值的,然后天真的我直接在 onCreateView中根据用setText()方法 来做。结果就是——闪退。最后发现取到的 TextView 是 null 。

解决办法: 其实有一个方法,是onActivityCreated() ,在里面为控件赋值就 OK 的。该方法是等布局加载完成之后,才能通过 ID 取到 Fragment 中的控件。相当于:我在水果店里买东西,伸手想从一个果篮里拿水果出来,但是发现篮子里什么都没有,等店员往里面放了商品之后,我才能在篮子里挑选自己想要的东西。

具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class FragmentMyInfo extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_my_info, container,false);
return view;
}
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//这里写要动态赋值的代码
TextView devType = (TextView) getActivity().findViewById(R.id.dev_type);
Log.d(TAG, "onCreateView: " + devType);
devType.setText(R.string.dev_type);
}
}

多说一句: title 没有取好,但暂时还不知道怎么用精准且简洁的语言来描述这个问题;第一次尝试用比喻来讲一个问题,也不知道比喻使用恰不恰当。之后想到了更好的都会改。

菜鸟发出一声凄厉的尖叫