Null Object 引用 在 getView() / fragment 中的 TextView 上



嗨,我尝试创建一个片段类:

import android.support.v4.app.Fragment;
public class UpdatesFragment extends Fragment {
TextView output ;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View view = inflater.inflate(R.layout.updates_layout, null, false);
    output = (TextView) getView().findViewById(R.id.jsonData);
    return view;
    }
}

但是当我在设备上运行我的应用程序时,应用程序会中断。

在安卓工作室编辑器上:

方法调用 'getView().findViewById(R.id.jsonData)' 可能会产生 'java.lang.NullPointerException'

在设备上调试器:

java.lang.NullPointerException: Try to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a 空对象引用

这是XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".UpdatesFragment"
    android:background="#24ff93">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HackPundit Blogs"
        android:textStyle="bold"
        android:id="@+id/heading"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textSize="38dp"
        android:textColor="#230cff" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:textSize="15dp"
        android:textStyle="bold"
        android:id="@+id/jsonData"
        android:layout_marginTop="42dp"
        android:layout_below="@+id/heading"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textColor="#000000" />

</RelativeLayout>

获取视图的正确方法是:

View view = inflater.inflate(R.layout.updates_layout, null, false);
output = (TextView) view.findViewById(R.id.jsonData);

您必须使用膨胀的视图来查找视图,而不是getView()

在片段中引用视图的正确方法是在此方法中;

 @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
//reference your fragments views here
    output = (TextView) getView().findViewById(R.id.jsonData);
}

最新更新