2016-10-10 2 views
-2

私は、コンテンツをTabLayoutに保持するためにFragmentを使用します。 その中にボタンがあります。私は断片クラスでインスタンス化しようとすると、私はこの次のエラーを取得する:ここでNullPointerExceptionフラグメント内のビューを初期化する

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) 

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

そして、ここでは私のフラグメントXMLレイアウトであるonCreateView(...)で私のコードです:

<?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> 

私は何を欠席しましたか?

ありがとう

+3

スタックトレースを追加していません。あなたの質問にそれを加えてください。 – Endzeit

+0

ええ、ログを追加してください。 – tpk

+0

質問が更新されました。 – fanjavaid

答えて

1

膨らませる前にfindViewsを検索しようとしているようです。 最初にビューを膨張させ、次にその子供にアクセスします。

あなたの活動から、あなたのビューを取得しようとしている。この

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

まだ動作しません – fanjavaid

+0

これまでと同じエラーが表示されますか? – Slamper

+0

はい、私はまだそのエラーを取得します。 – fanjavaid

1

を試してみてください。あなたはあなたの断片を膨らませなければなりません。 Slapmerとビクターが指摘したように、あなたが(膨張)Viewを作成する前にViewにアクセスしようとしているため

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

'onViewCreated(..)'にビューにアクセスしているコードを配置する方が良いでしょう。 – tpk

0

NPエラーは、あります。

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

}

コーディングハッピー:

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

それはこのように、onViewCreated(...)Viewにアクセスするコードを追加する方が良いでしょう!

関連する問題