Android 碎片在布局充气器上提供空对象引用
我有一个片段“data”类,它从主活动类接收字符串数组,并将这些字符串设置为自身内部的textviewAndroid 碎片在布局充气器上提供空对象引用,android,Android,我有一个片段“data”类,它从主活动类接收字符串数组,并将这些字符串设置为自身内部的textview 我有一个函数“set”,它接收字符串数组作为参数,并将其设置为textview片段“数据”类的代码为- 日志cat错误为- java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.LayoutInflater android.app.Activity.getLayoutInflater()
我有一个函数“set”,它接收字符串数组作为参数,并将其设置为textview
片段“数据”类的代码为-
日志cat错误为-
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.LayoutInflater android.app.Activity.getLayoutInflater()' on a null object reference
*****编辑*********
现在我使用bundle而不是字符串数组传递数据-
我的数据类如下-
公共类数据扩展片段{
TextView t1,t2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.data,container,false);
t1=(TextView)v.findViewById(R.id.textView3);
t2=(TextView)v.findViewById(R.id.textView4);
return v;
}
public void set(){
t1.setText(getArguments().getString("name"));
t2.setText(getArguments().getString("email"));
}
}
我从我的主要活动中这样称呼这组人
show.setOnClickListener(new OnClickListener(){ public void onClick(View v){
FragmentTransaction ft=getFragmentManager().beginTransaction();
data frag=new data();
ft.add(R.id.ly2,frag);
ft.commit();
String s[]=data.show();
Bundle b=new Bundle();
b.putString("name",s[0]);
b.putString("email",s[1]);
frag.setArguments(b);
frag.set();
}});<br><br>
Logcat现在说-
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
请提供帮助。在片段附加到活动之前,您正在调用set()
更新:在编辑的问题中,在片段附加到活动之前,您仍在调用
set()
。commit()
对片段事务的处理是异步的;在将主应用程序线程的控制权返回框架之前,将片段附加到活动的工作不会开始
public class data extends Fragment {
TextView t1;
TextView t2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.data,container,false);
t1=(TextView)v.findViewById(R.id.textView3);
t2=(TextView)v.findViewById(R.id.textView4);
return v;
}
public void set(String[] a){
t1.setText(a[0]);
t2.setText(a[1]);
}
}
在一个片段中,您不需要将布局膨胀两次。在片段被添加到活动之前,您可能会调用set(String[]a)
方法,从而调用其方法getActivity()
返回null。我不知道为什么要在片段中的set方法中再次使用布局充气器来充气相同类型的另一个布局。只需在onViewCreated
方法中检索视图,并在集合(String[]a)
方法中使用thrm之前我一直在调用set()在添加片段之前,但现在我已经做了更正,它仍然会给我相同的错误。是的。但是它在方法get()中给我出了范围外的错误。请提供logcat和您的代码您的“get”方法在哪里…?您只有“set”方法?之前我一直在调用set()在添加片段之前,但现在我已经做了更正,它仍然会给我相同的错误。@Shivamaggarwal:那么在片段被附加到活动之前,你仍然在调用它。@Shivamaggarwal:我已经更新了我的答案,以反映你更新的问题。好的。但是先生,我该怎么做呢?我现在找不到任何方法。@Shivamaggarwal:将剩下的两行从set()
移到onCreateView()
。然后,去掉set()
和对set()的调用
。此外,我建议在对碎片事务
中的碎片执行任何操作之前,先将参数Bundle
附加到碎片上,尽管这样做可能会起作用。为什么会超出作用域?它们不是超出作用域,而是类变量?但一旦初始化,我就假定它们是类变量不再为null。因此,一旦片段在视图中,就可以访问TextView。很抱歉,miriana弄错了。是的,它们没有超出范围,但现在出现了一个新错误。
java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)'在空对象引用上,我正在编辑答案:P。请回答您自己的问题或接受最有帮助的答案,以便对社区有益。祝您编码愉快
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
public class data extends Fragment {
TextView t1;
TextView t2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.data,container,false);
t1=(TextView)v.findViewById(R.id.textView3);
t2=(TextView)v.findViewById(R.id.textView4);
return v;
}
public void set(String[] a){
t1.setText(a[0]);
t2.setText(a[1]);
}
}