Android 在布局中引用视图时出现空指针错误
真的很简单,但就是不明白。 我想引用膨胀的Android 在布局中引用视图时出现空指针错误,android,android-fragments,Android,Android Fragments,真的很简单,但就是不明白。 我想引用膨胀的FragmentsXML文件中的ID视图 我宣布这一观点 TextView nameView; 我正在从布局图中获取视图 View view = inflater.inflate(R.layout.trackfrag, group, false); nameView = (TextView)view.findViewById(R.id.trackName); 在下面的方法中,当从其活动调用它时,我发现了这个问题 public void setTra
Fragments
XML文件中的ID视图
我宣布这一观点
TextView nameView;
我正在从布局图中获取视图
View view = inflater.inflate(R.layout.trackfrag, group, false);
nameView = (TextView)view.findViewById(R.id.trackName);
在下面的方法中,当从其活动调用它时,我发现了这个问题
public void setTrackDetails (String name, String description) {
Log.e("TRACKFRAG", "setTrackDetails Called");
nameView.setText(name);
Log.e("TRACKFRAG", "setTrackDetails Finished");
}
任何帮助都将不胜感激
添加了XML
<TextView
android:id="@+id/trackName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/anchor"
android:text="Track Name"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="22sp" />
添加片段方法
void addFragment(Fragment fragment, boolean addToBackStack, String tag, int transition) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.content, fragment);
ft.setTransition(transition);
if (addToBackStack)
ft.addToBackStack(null);
ft.commit();
}
你是这样初始化充气机的吗
inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
看看这个。
清理项目并运行…我也遇到了这个问题
上面提到的代码,只需在
Fragment
类中的onActivityCreated()
方法中编写该部分。这样我就解决了问题。您的问题在于调用setTrackDetails()方法。请查看您可以看到的地方:
调用commit()不会立即执行事务。相反,它会安排它在活动的UI线程(“主”线程)上运行,只要该线程能够这样做
所以,在您调用commit之后,您的片段还没有创建,或者正在创建,并且您的nameView还没有设置。
最好的解决方案是在创建片段之后(可以在设置nameView之后,因为片段已经有活动)调用活动中的方法,该活动获取文本:
View view = inflater.inflate(R.layout.trackfrag, group, false);
nameView = (TextView)view.findViewById(R.id.trackName);
String str = ((MyActivity)getActivity()).getTextForLabel();
nameView.setText(str);
请阅读有关片段及其生命周期的文档。来自其活动-它意味着来自其片段类或其片段活动类日志中的错误是什么?NullPointerException?向我们展示trackfrag.xmlYea这是一个NullPointerException我将把xml添加到原始文件中,您可以给我们提供带有trackfrag的xml。据我所知,您在此布局中没有trackName,因此在findViewById之后,它是空的。我想要的文本视图的xml在充气器上方,通过create view方法传入,因此我不需要初始化它。但是,您是如何从该方法访问充气器和视图组的?我使用了您使用的相同语句,但我使用getActivity()方法访问它
View view = inflater.inflate(R.layout.trackfrag, group, false);
nameView = (TextView)view.findViewById(R.id.trackName);
String str = ((MyActivity)getActivity()).getTextForLabel();
nameView.setText(str);