Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在布局中引用视图时出现空指针错误_Android_Android Fragments - Fatal编程技术网

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);