0

Полный след ошибки:Получение исключение NullPointer на Recyclerview при установке менеджера компоновки в фрагменте

07-09 15:04:39.552 32410-32410/com.example.junker.lectio E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.junker.lectio, PID: 32410 
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 com.example.junker.lectio.OpgaveFragmentIndhold.onCreateView(OpgaveFragmentIndhold.java:103) 
     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) 
     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740) 
     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) 
     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490) 
     at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) 
     at android.support.v4.view.ViewPager.populate(ViewPager.java:1105) 
     at android.support.v4.view.ViewPager.populate(ViewPager.java:951) 
     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1473) 
     at android.view.View.measure(View.java:17430) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17430) 
     at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:868) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001) 
     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
     at android.view.Choreographer.doFrame(Choreographer.java:550) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityTh 

первый раз, используя recyclerview и боролись с этим весь день. Попробовали массу вещей, перемещая с адаптером recyclerview из on, чтобы создать его в oncreateview, убедившись, что я объявляю менеджер компоновки и проверяю код на странные ошибки.

OpgaveFragmentIndhold

public class OpgaveFragmentIndhold extends Fragment { 
// TODO: Rename parameter arguments, choose names that match 
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
private static final String ARG_PARAM1 = "param1"; 
private static final String ARG_PARAM2 = "param2"; 

// TODO: Rename and change types of parameters 
private String mParam1; 
private String mParam2; 

private RecyclerView rvOpgave; 
private RecyclerView.Adapter rvAdapter; 
private RecyclerView.LayoutManager rvLayoutManager; 


private OnFragmentInteractionListener mListener; 

/** 
* Use this factory method to create a new instance of 
* this fragment using the provided parameters. 
* 
* @param param1 Parameter 1. 
* @param param2 Parameter 2. 
* @return A new instance of fragment OpgaveFragmentIndhold. 
*/ 
// TODO: Rename and change types and number of parameters 
public static OpgaveFragmentIndhold newInstance(String param1, String param2) { 
    OpgaveFragmentIndhold fragment = new OpgaveFragmentIndhold(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

public OpgaveFragmentIndhold() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 

} 

//Use this part to get the data from lectio and input it here 
private ArrayList<Opgave> getOpgaveInfo() { 
    ArrayList<Opgave> items = new ArrayList<>(); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    items.add(new Opgave("Opgave titel", "15", "3 dage og 15 timer","link")); 
    return items; 
} 



@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_skema, container, false); 

    rvOpgave = (RecyclerView) rootView.findViewById(R.id.opgave_recycler_view); 

    rvAdapter = new OpgaveRecyclerViewAdapter(getOpgaveInfo()); 
    rvLayoutManager = new LinearLayoutManager(getActivity()); 


    rvOpgave.setLayoutManager(rvLayoutManager); 
    rvOpgave.setAdapter(rvAdapter); 




    return rootView; 


} 

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


} 

// TODO: Rename method, update argument and hook method into UI event 
public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

/** 
* This interface must be implemented by activities that contain this 
* fragment to allow an interaction in this fragment to be communicated 
* to the activity and potentially other fragments contained in that 
* activity. 
* <p/> 
* See the Android Training lesson <a href= 
* "http://developer.android.com/training/basics/fragments/communicating.html" 
* >Communicating with Other Fragments</a> for more information. 
*/ 
public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    public void onFragmentInteraction(Uri uri); 
} 

} 

OpgaveRecyclerViewAdapter

 public class OpgaveRecyclerViewAdapter extends RecyclerView.Adapter<OpgaveRecyclerViewAdapter.ViewHolder> { 

private ArrayList<Opgave> opgaver; 



public OpgaveRecyclerViewAdapter(ArrayList<Opgave> opgaver){ 
    this.opgaver = opgaver; 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    public TextView opgaveTitel; 
    public TextView opgaveTidspunkt; 
    public TextView opgaveUge; 


    public ViewHolder(View itemView) { 
     super(itemView); 
     this.opgaveTitel =(TextView) itemView.findViewById(R.id.opgaveTitel); 
     this.opgaveTidspunkt =(TextView) itemView.findViewById(R.id.opgaveTidspunkt); 
     this.opgaveUge =(TextView) itemView.findViewById(R.id.opgaveUge); 
    } 

} 

@Override 
public void onBindViewHolder(OpgaveRecyclerViewAdapter.ViewHolder holder, int position) { 
    // Get the data model based on position 
    Opgave opgave = opgaver.get(position); 
    // Set item views based on the data model 
    holder.opgaveTitel.setText(opgave.opgaveTitel); 
    holder.opgaveTidspunkt.setText(opgave.opgaveTidspunkt); 
    holder.opgaveUge.setText(opgave.opgaveUge); 
} 

@Override 
public OpgaveRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View itemView = LayoutInflater.from(parent.getContext()). 
      inflate(R.layout.opgave_item, parent, false); 
    // Return a new holder instance 
    return new OpgaveRecyclerViewAdapter.ViewHolder(itemView); 


} 



@Override 
public int getItemCount() { 
    return opgaver.size(); 
} 


} 

opgave класс

public class Opgave { 

public String opgaveTitel; 
public String opgaveUge; 
public String opgaveTidspunkt; 
public String opgaveId; 

public Opgave(String opgaveTitel, String opgaveUge, String opgaveTidspunkt, String opgaveId) { 
    this.opgaveTitel = opgaveTitel; 
    this.opgaveUge = opgaveUge; 
    this.opgaveTidspunkt = opgaveTidspunkt; 
    this.opgaveId = opgaveId; 
} 
} 

opgave_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

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

</RelativeLayout> 





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

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:id="@+id/opgaveTitel" 
    android:text="titel" 
    android:layout_gravity="center_horizontal" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="25sp" 
    android:text="15" 
    android:id="@+id/opgaveUge" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="tidspunkt" 
    android:id="@+id/opgaveTidspunkt" 
    android:layout_marginLeft="10dp" 
    android:layout_gravity="right" /> 


</LinearLayout> 
+0

попробовать надувать 'R.layout.opgave_fragment' –

ответ

2

Вы раздуваете неправильный файл xml. Изменение:

View rootView = inflater.inflate(R.layout.fragment_skema, container, false); 

в

View rootView = inflater.inflate(R.layout.opgave_fragment, container, false); 
+1

бог, черт побери, должен был исправить его fragment_opgave_fragment_indhold быть точным. Мне нужно доказать, что мой код лучше читать, по крайней мере, сейчас он супер чистый :) – OJunker

Смежные вопросы