2016-10-10 3 views
-2

Ich verwende Fragment, um meinen Inhalt in TabLayout zu halten. Im Inneren habe ich Button. Wenn ich versuche, in Fragment Klasse zu instanziiert bekomme ich diese folgende Fehlermeldung:NullPointerException Initialize View in Fragment

com.example.fanjavaid.tablayout E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.NullPointerException 
      at com.example.fanjavaid.tablayout.fragment.AccountFragment.onCreateView(AccountFragment.java:27) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
      at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638) 
      at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679) 
      at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166) 
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1240) 
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1088) 
      at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614) 

Hier ist mein Code in onCreateView (...)

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     RelativeLayout mFragmentAccount = (RelativeLayout) getActivity().findViewById(R.id.fragment_account); 

     mBtnAddPerson = (Button) mFragmentAccount.findViewById(R.id.add_person); 
     Typeface font = Typeface.createFromAsset(mFragmentAccount.getContext().getAssets(), "/fonts/Rubik-Regular.ttf"); 
     mBtnAddPerson.setTypeface(font); 

     return inflater.inflate(R.layout.fragment_account, mFragmentAccount,true); 
    } 

Und hier ist mein Fragment XML-Layout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment_account" 
    android:padding="@dimen/activity_horizontal_margin" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:text="Hello Android!"/> 

    <Button 
     android:id="@+id/add_person" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:gravity="center" 
     android:text="Add People"/> 

</RelativeLayout> 

Was habe ich vermisst?

Danke

+3

Sie haben vergessen, den Stacktrace hinzuzufügen. Bitte fügen Sie es zu Ihrer Frage hinzu. – Endzeit

+0

Ja, bitte fügen Sie das Protokoll hinzu. – tpk

+0

Frage aktualisiert, danke – fanjavaid

Antwort

1

Es sieht aus wie Sie findViews versuchen, bevor sie aufgeblasen wird. Zuerst die Ansicht aufblasen und dann auf die Kinder zugreifen.

versuchen, diese bitte

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View mFragmentAccount = inflater.inflate(R.layout.fragment_account, container,true); 

    mBtnAddPerson = (Button) mFragmentAccount.findViewById(R.id.add_person); 
    Typeface font = Typeface.createFromAsset(mFragmentAccount.getContext().getAssets(), "/fonts/Rubik-Regular.ttf"); 
    mBtnAddPerson.setTypeface(font); 

    return mFragmentAccount; 
} 
+0

Funktioniert immer noch nicht für mich – fanjavaid

+0

Erhalten Sie immer noch den gleichen Fehler wie zuvor? – Slamper

+0

Ja, ich bekomme immer noch diesen Fehler .. – fanjavaid

1

Sie versuchen, Ihre Ansicht von Ihrer Aktivität zu erhalten. Sie müssen Ihr Fragment aufblasen.

View rootView = inflater.inflate(R.id.fragment_account, container, false); 
+0

Es ist auch besser, den Code, der auf Ansicht zugreifen, in 'onViewCreated (..)' zu platzieren – tpk

0

der NP Fehler, wie Slapmer und Victor darauf hingewiesen, liegt daran, dass Sie versuchen, View zuzugreifen, bevor Sie (aufgeblasen) erstellt View.

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_account, mFragmentAccount,true); 
    } 

Es ist besser, Code hinzufügen, View in onViewCreated(...), wie dieser Zugang:

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

    RelativeLayout mFragmentAccount = (RelativeLayout) getActivity().findViewById(R.id.fragment_account); 
    mBtnAddPerson = (Button) mFragmentAccount.findViewById(R.id.add_person); 
    Typeface font = Typeface.createFromAsset(mFragmentAccount.getContext().getAssets(), "/fonts/Rubik-Regular.ttf"); 
    mBtnAddPerson.setTypeface(font); 

}

Glücklich Coding!

Verwandte Themen