2

我正在制作RecyclerView inside a fragment。我通过Java代码创建了我的RecyclerView适配器和LinearLayoutManager的对象。如何在片段内动态添加视图

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

但它给我上具有setAdapter方法行了NullPointerException。即使当我删除2个适配器行时,我也会在setLayoutManager方法中出现此错误。我该如何解决?

这里是我的logcat:

                 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"/> 

而在你的情况,何况在你RFPMenuFragment.java的布局将有RecyclerView不是single_feed布局(如果这样做,其名)。

-1

onCreateView,该片段尚未连接到活动,因此getActivity()返回null。您需要实例化布局管理器,适配器和recyclerview在onActivityCreated()

编辑:代码

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. 由于Drup德赛建议,尝试设置布局管理器设置适配器之前。

  2. 检查方法initializeData()是否实际初始化并填充数据列表。当适配器连接到RecyclerView时,某个null列表可能会导致NPE。

+0

移动setLayoutManager方法没有帮助。我已经检查过,数据列表正在填充。 – TheHardRock