2016-12-25 1 views
1

내 안드로이드 응용 프로그램에서 CardView를 사용하려고합니다. 두 번째 자습서를 따르고 있으며 같은 방법으로 동일한 오류가 발생합니다. 내가 뭘 잘못하고 있다고 지적 할 수 있니?RecyclerView.setLayoutManager의 NPE

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

    EventObject[] objects = (EventObject[]) getArguments().getSerializable(OBJECTS_KEY); 

    eventsRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2)); 
    eventsRecyclerView.setAdapter(new EventsAdapter(objects)); 

} 

EventsAdapter.java :

package co.scuer.licznik; 

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


public class EventsAdapter extends RecyclerView.Adapter<EventsAdapter.EventsViewHolder> { 


    private final EventObject[] events; 

    public EventsAdapter(EventObject[] events) { 
     this.events = events; 
    } 

    @Override 
    public EventsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 


     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_event, parent, false); 
     return new EventsViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(EventsViewHolder holder, int position) { 

    } 

    @Override 
    public int getItemCount() { 
     return events.length; 
    } 

    class EventsViewHolder extends RecyclerView.ViewHolder { 

     public EventsViewHolder(View itemView) { 
      super(itemView); 
     } 
    } 
} 
여기

java.lang.RuntimeException: Unable to start activity ComponentInfo{co.scuer.licznik/co.scuer.licznik.EventsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference 
    at co.scuer.licznik.EventsFragment.onViewCreated(EventsFragment.java:46) 
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:988) 
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
    at android.app.BackStackRecord.run(BackStackRecord.java:793) 
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
    at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
    at android.app.Activity.performStart(Activity.java:6252) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
    at android.app.ActivityThread.-wrap11(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:5417)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

EventsFragment 중 한 방법이다 : 여기

에러 코드의

그리고 item_event.xml는 :

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:id="@+id/itemImageView" 
      android:background="@android:color/black" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:id="@+id/itemTextView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 


    </LinearLayout> 

</android.support.v7.widget.CardView> 

내가 얻을이 문제를 해결할 수없는 것. 더 많은 코드를 게시해야하는지 알려주십시오.

편집 :

나는 onCreateView 오버라이드 (override) 할 :

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_events, container, false); 
    ButterKnife.bind(this, view); 
    return view; 
} 
+1

같은'보기보기를 할 필요 = LayoutInflater.from은 (parent.getContext는()) ...'내부 당신 조각 및 초기화'recyclerview'에' –

+0

당신은 onCreateView을 무시 했 onViewCreated'? – Rahul

답변

4

먼저 조각에서보기를 초기화.

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

그런 다음 UI 구성 요소를 초기화하십시오.

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

// Init your RecyclerView here 
    RecyclerView eventsRecyclerView = (RecyclerView)view.findViewById(R.id.your_viewid); 

    EventObject[] objects = (EventObject[]) getArguments().getSerializable(OBJECTS_KEY); 
    eventsRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2)); 
    eventsRecyclerView.setAdapter(new EventsAdapter(objects)); 
} 
+0

도움을 주셔서 감사합니다. – krzk