我最近开始学习android,我正在观看视频教程中的片段示例 在教程中他们没有使textview静态,但当我试图实现片段与代码中的一些更改我开始得到空指针异常我的代码看起来像这样
public class BlankFragment2 extends Fragment {
TextView tv;
public BlankFragment2() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
tv= (TextView) getActivity().findViewById(R.id.txt2);
}
public void setName(String name){
//tv=(TextView)getActivity().findViewById(R.id.txt2);
if(tv == null){
System.out.println("tv is null");
}
tv.setText("Hi "+name);
}
}
我在settext上得到空指针异常,除非我使textview静态可以有人请解释原因
这与NPE不重复我知道NPE是什么以及为什么它在这里显示我的问题是在onActivityCreated初始化textview之后为什么它在setname函数中再次为null
答案 0 :(得分:1)
当应用程序尝试使用时抛出NullPointerException 具有空值的对象引用。
<强> FYI 强>
findViewById(R.id.txt2
。确保 XML 中存在 ID 。<强>唐&#39;吨强>
tv= (TextView) getActivity().findViewById(R.id.txt2);
<强>不要强>
tv= (TextView) view.findViewById(R.id.txt2);
试试这种方式
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
tv= (TextView) view.findViewById(R.id.txt2);
return view;
}
答案 1 :(得分:1)
不是sudo gunzip server.conf.gz -c /etc/openvpn
,它必须是getActivity().findViewById()
,因为view.findViewById()
会在Activity.findViewById()
布局中寻找View
,而Activity
会看起来对于view.findViewById()
布局中的View
。
Fragment
在@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflatedView = inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
return inflatedView;
}
中,您可以初始化onViewCreated
TextView
确保@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// here goes your intialisation using view
tv= (TextView) view.findViewById(R.id.txt2);
}
TextView
txt2
fragment_blank_fragment2.xml
答案 2 :(得分:0)
对不起,伙计们,这是我身边的一个愚蠢的错误, 在我的主要活动中,我写了
BlankFragment2 frag2 = new BlankFragment2();
frag2.setName(name);
我通过写
来纠正它BlankFragment2 frag2=(BlankFragment2)getFragmentManager().findFragmentById(R.id.frag2);
fragb.setName(name);
现在正在运作