2

私はRecyclerView inside a fragmentを作っていました。 RecyclerView AdapterとLinearLayoutManagerのオブジェクトをJavaコードで作成しました。フラグメント内でビューを動的に追加する方法

public class RFPMenuFragment extends Fragment{ 

    List<MyRFP> myRFPList; 
    RecyclerView recyclerViewRFP; 
    RVAdapterRFP rvAdapterRFP; 
    LinearLayoutManager llm; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     //return super.onCreateView(inflater, container, savedInstanceState); 
     View view = inflater.inflate(R.layout.single_feed, container, false); 

     recyclerViewRFP = (RecyclerView) view.findViewById(R.id.recycler_view_rfp); 

     initializeData(); 


     rvAdapterRFP = new RVAdapterRFP(myRFPList); 
     recyclerViewRFP.setAdapter(rvAdapterRFP); 

     llm = new LinearLayoutManager(getActivity()); 
     recyclerViewRFP.setLayoutManager(llm); 

     return view; 
} 

しかし、私には、NullPointerExceptionという行がsetAdapterメソッドを持っています。 2つのアダプタ行を削除しても、setLayoutManagerメソッドでこのエラーが発生します。これをどうやって解決するのですか?

onCreateView
                 Process: com.example.h8pathak.jobs, PID: 26848 
                     java.lang.NullPointerException 
                      at com.example.h8pathak.jobs.rfp.RFPMenuFragment.onCreateView(RFPMenuFragment.java:41) 
                      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074) 
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286) 
                      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) 
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) 
                      at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:532) 
                      at android.os.Handler.handleCallback(Handler.java:733) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:149) 
                      at android.app.ActivityThread.main(ActivityThread.java:5257) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
                      at dalvik.system.NativeStart.main(Native Method) 
+0

'single_feed.xml'ファイルを追加してください –

+0

RVAdapterRFPにコンテキストを渡してください –

+0

アダプタを設定する前にレイアウトマネージャを設定してみてください。 –

答えて

1

あなたはsingle_feedレイアウトでRecyclerViewを追加していないようです。

これが当てはまる場合は、RecyclerViewでデータを入力するレイアウトに次の部分を追加します。

<android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

そして、あなたの場合は

は、(それがない場合は、その名前が示唆するもの)RecyclerViewないsingle_feedレイアウトを持っていますあなたの RFPMenuFragment.javaでレイアウトを言及します。

-1

、フラグメントがまだ活動に添付されていない、ので、getActivity()戻りヌル:

は、ここに私のLogCatです。あなたはonActivityCreated()

編集であなたのレイアウトマネージャ、アダプタとrecyclerviewをインスタンス化する必要があります。コードDrupデサイが示唆したように

public class RFPMenuFragment extends Fragment{ 

List<MyRFP> myRFPList; 
RecyclerView recyclerViewRFP; 
RVAdapterRFP rvAdapterRFP; 
LinearLayoutManager llm; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    //return super.onCreateView(inflater, container, savedInstanceState); 
    View view = inflater.inflate(R.layout.single_feed, container, false); 
    recyclerViewRFP = (RecyclerView) view.findViewById(R.id.recycler_view_rfp); 
    return view; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    initializeData(); 

    rvAdapterRFP = new RVAdapterRFP(myRFPList); 
    recyclerViewRFP.setAdapter(rvAdapterRFP); 

    llm = new LinearLayoutManager(getActivity()); 
    recyclerViewRFP.setLayoutManager(llm); 
} 
+0

findViewById()メソッドがonActivityCreated()で機能していません。 – TheHardRock

+0

'onCreateView'でビューをインスタンス化することはできますが、' onActivityCreated'で他のすべてを行います。 – basilisk

+0

これで、onActivityCreatedメソッドでNullPointerExceptionが発生しました。 – TheHardRock

0
  1. 、アダプターをセットする前にレイアウトマネージャを設定してみてください。

  2. メソッドinitializeData()が実際にデータリストを初期化してデータを入力しているかどうかを確認してください。アダプタがRecyclerViewに接続されている場合は、nullのリストでNPEが発生している可能性があります。

+0

setLayoutManagerメソッドのシフトは役に立ちません。そして私がチェックしたところでは、データリストにデータが取り込まれています。 – TheHardRock

関連する問題