2016-05-22 53 views
-1

下面是我的片段的代码,我试图在视图中设置textView的文本,我的印象是,只要你首先膨胀视图,它不会返回null,因为它已经创建。根据片段生命周期。通货膨胀后空指针异常吗?

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View loginFragmentView = inflater.inflate(R.layout.login_layout, container, false); 
     TextView imei = (TextView) loginFragmentView.findViewById(R.id.txt_device_id); 
     imei.setText("IMEI: "); 
     return loginFragmentView; 
    } 

这确实会导致应用程序崩溃与nullPointerException,没有人知道如何解决此问题。有没有一种方法我可以重写,只会被称为片段生命周期完成。

我也尝试将它放在onResume()中,因为它在生命周期结束时是正确的,但具有相同的结果。任何想法?

编辑

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Your device ID:" 
     android:id="@+id/txt_id_title" 
     android:layout_marginTop="15dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:text="Fetching ID..." 
     android:id="@+id/txt_device_id" 
     android:layout_below="@+id/txt_id_title" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

错误日志

05-22 19:40:02.230 2799-2799/? E/AndroidRuntime: FATAL EXCEPTION: main 
               Process: alertssystem.rrr.lsa13.rrr_alerts, PID: 2799 
               java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.widget.TextView.toString()' on a null object reference 
                at alertssystem.rrr.lsa13.rrr_alerts.login_layout_fragment.onCreateView(login_layout_fragment.java:24) 
                at android.app.Fragment.performCreateView(Fragment.java:2053) 
                at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
                at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
                at android.app.BackStackRecord.run(BackStackRecord.java:833) 
                at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
                at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447) 
                at android.os.Handler.handleCallback(Handler.java:739) 
                at android.os.Handler.dispatchMessage(Handler.java:95) 
                at android.os.Looper.loop(Looper.java:135) 
                at android.app.ActivityThread.main(ActivityThread.java:5221) 
                at java.lang.reflect.Method.invoke(Native Method) 
                at java.lang.reflect.Method.invoke(Method.java:372) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
+0

确保在'login_layout'布局中有一个ID为'txt_device_id'的'TextView'。 – Titus

+0

你的堆栈跟踪?!你在哪里得到猿? –

+1

错了,我重新编辑了。 –

回答

0

您的问题,因为你是根据片段lifycycle宣布TextView的太早,所以,而不是在onCreateView宣布它,声明在onViewCreated,所以它会是:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View loginFragmentView = inflater.inflate(R.layout.login_layout, container, false); 
     return loginFragmentView; 
    } 


    @Override 
    public void onViewCreated(View loginFragmentView, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     TextView imei = (TextView) loginFragmentView.findViewById(R.id.txt_device_id); 
     imei.setText("IMEI: "); 
    } 
+0

仍然返回空指针。 :( 与上面完全一样 –

+0

TextView的名字是'txt_id_title'而不是'txt_device_id' –

+0

看下它,不要混淆android:layout_below位, –

0

看你的堆栈跟踪我猜你loginFragmentView没有类型的TextView的孩子ID txt_device_id所以检查,如果在充气方法,则需要通过其中包含的TextView与ID你正在努力寻找

正确的布局名称
+0

这绝对是在那里。请参阅相关布局标记。 –

+0

你可以通过在TextView中放置断点来检查你的loginViewFragment是否包含该视图。imei =(TextView)loginFragmentView.findViewById(R.id.txt_device_id);并评估表达。检查loginViewFragment的孩子 –