it-swarm.com.de

App stürzt ab, wenn versucht wird, RecyclerView unter Android 5.0 zu verwenden

Ich versuche, mich mit dem neuen RecyclerView zu beschäftigen, und wenn ich versuche, es auszuführen, stürzt meine App sofort ab. Es gibt mir NullPointerException für den Versuch, auf Methoden von Android.support.v7.widget.RecyclerView zuzugreifen. Ich habe mir andere Posts angesehen und gesehen, dass die meisten Leute compile 'com.Android.support:recyclerview-v7:+' nicht hatten, aber ich habe es versucht und es hat überhaupt nicht geholfen. Nicht wirklich sicher, was zu diesem Zeitpunkt zu tun ist, wäre jede Hilfe dankbar. Hier das Fehlerprotokoll: (Ich würde ein Bild posten, aber ich habe noch keine 10 Wiederholungen)

Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(Android.support.v7.widget.RecyclerView$Recycler, Android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference
        at Android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.Java:1764)
        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.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:851)
        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 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:5786)
        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.ActivityThread.main(ActivityThread.Java:5221)
        at Java.lang.reflect.Method.invoke(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:372)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:898)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:693)
89
Joe

Dieses Problem tritt normalerweise auf, wenn keine LayoutManager für die RecyclerView angegeben wurde. Sie können es so machen: 

final LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
210
aga

In meinem Fall war es nicht mit 'final' verbunden, sondern mit dem in @ NemanjaKovačević kommentierten Problem an @aga answer . Ich hatte einen LayoutManager für das Laden von Daten festgelegt, und das war der Grund für den gleichen Absturz. Nachdem das LayoutManager-Setup auf onCreateView meines Fragments verschoben wurde, wurde das Problem behoben.

Etwas wie das:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
{
...
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler);

mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mLayoutManager);
26
YuriK

Für mich hatte ich das gleiche Problem. Das Problem bestand darin, dass es in xml eine ungenutzte RecyclerView-Ansicht gab, deren Ansicht jedoch weg war. Ich binde sie jedoch nicht an einen Adapter in Activity. Es wurde behoben, sobald ich solche ungenutzten Ansichten des Recyclers in xml entfernt hatte

ich habe diese Ansicht entfernt, da diese nicht im Code aufgerufen wurde oder ein Adapter festgelegt wurde

<Android.support.v7.widget.RecyclerView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:id="@+id/rv_profileview_allactivities"
        Android:visibility="gone" />
10
Maurice

Ich habe diesen Absturz erlebt, obwohl ich den RecyclerView.LayoutManager richtig eingestellt hatte. Ich musste den Initialisierungscode RecyclerView in den Callback onViewCreated(...) verschieben, um dieses Problem zu beheben.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_listing, container, false);
    rootView.setTag(TAG);
    return inflater.inflate(R.layout.fragment_listing, container, false);
}

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

    mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);

    mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    mRecyclerView.setLayoutManager(mLayoutManager);

    mAdapter = new ListingAdapter(mListing);
    mRecyclerView.setAdapter(mAdapter);
}
8
Shirish Kamath

Sie müssen setLayoutManager in der RecyclerView#onCreate()-Methode verwenden. Vor dem Hinzufügen von recyclerView zu einer Ansicht muss die LayoutManager festgelegt sein.

 private RecyclerView menuAsList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    menuAsList = (RecyclerView) findViewById(R.id.recyclerView_mainMenu);
    menuAsList.setLayoutManager(new LinearLayoutManager(Home.this));

}
4
katwal-Dipak
recyclerView =
            (RecyclerView) findViewById(R.id.recycler_view2);

Erkundigen Sie sich bei Ihrer Recycler-View-ID und zeigen Sie auf die tatsächliche Recycler-Ansicht, die mein Problem gelöst hat

2
iam_muqshid

Mein Problem war in meinem XML-Lyout. Ich habe ein Android: animateLayoutChanges auf true gesetzt und notifyDataSetChanged () auf dem RecyclerView-Adapter im Java-Code aufgerufen.

Also habe ich gerade Android: animateLayoutChanges aus meinem Layout entfernt und damit mein Problem behoben.

1
Ahlem Jarrar

Ich habe dieses Problem aufgrund einer falschen Referenz von RecyclerView id erhalten.

recyclerView = (RecyclerView) findViewById(R.id.rv_followers_list);

zu

recyclerView = (RecyclerView) findViewById(R.id.rv_search_list);
1
Stephen

In meinem Fall habe ich nur die Buttermesser-Bibliothek hinzugefügt und vergessen, annotationProcessor hinzuzufügen. Indem ich die folgende Zeile zu build.gradle (App-Modul) hinzufügte, löste sich mein Problem.

    annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
0
Pooja

Ich denke, das Problem in Ihrer Adapter. Stellen Sie sicher, dass Sie ViewHolder in onCreateViewHolder(). Zurückgegeben haben.

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v;
    v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_leaderboard, parent, false);
    ViewHolder view_holder = new ViewHolder(v);
    return view_holder;
}
0
Hardik Lakhani

Ich hatte dieses Problem bei der Verwendung der Butterknife-Bibliothek ...

View rootView = inflater.inflate
                (R.layout.fragment_recipe_detail_view, container, false);
ButterKnife.bind(rootView);

Die korrekte Version ist jedoch:

View rootView = inflater.inflate
                (R.layout.fragment_recipe_detail_view, container, false);
ButterKnife.bind(this, rootView);
0
Ivars Briedis

Ich benutzte ein Dependency Injection - ButterKnife und dieses Problem entstand, weil ich die Ansicht nicht gebunden hatte.

Also habe ich in onCreate () gerade diese Zeile eingefügt:

ButterKnife.bind(this);

Meine RecyclerView-Deklaration mit Abhängigkeitsinjektion:

@BindView(R.id.recyclerview)
RecyclerView recyclerView;
0
rohegde7

Da LinearLayoutManager standardmäßig vertikal ist, ist dies einfacher:

recyclerView.setLayoutManager(new LinearLayoutManager(context));

Wenn Sie die Ausrichtung ändern möchten, können Sie diesen Konstruktor verwenden:

public LinearLayoutManager(Context context, int orientation, boolean reverseLayout);
0
l-l

Recyclerview recylerview = findbyid (R.id.recyclerview) Vielleicht haben Sie es verpasst

0
Sadique Khan

In Gradle Implementiere diese Bibliothek: 

implementation 'com.Android.support:appcompat-v7:SDK_VER'
implementation 'com.Android.support:design:SDK_VER'
implementation 'com.Android.support:support-v4:SDK_VER'
implementation 'com.Android.support:support-v13:SDK_VER'
implementation 'com.Android.support:recyclerview-v7:SDK_VER'

InXMLwie folgt erwähnen: 

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

In Fragment verwenden wir recyclerView wie folgt:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
       View rootView = inflater.inflate(R.layout.YOUR_LAYOUT_NAME, container, false);

       RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);
        APICallMethod();
        YOURADAPTER = new YOURADAPTER(getActivity(), YOUR_LIST); // you can use that adapter after for loop in response(APICALLMETHOD)
        recyclerView.setAdapter(YOURADAPTER);
        return rootView;
    }

In Activity verwenden wir RecyclerView wie folgt:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.YOUR_LAYOUT_NAME);

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);
        APICallMethod();
        YOURADAPTER = new YOURADAPTER(ACTIVITY_NAME.this, YOUR_LIST); // you can use that adapter after for loop in response(APICALLMETHOD)
        recyclerView.setAdapter(YOURADAPTER);
   }

wenn Sie horizontal RecyclerView benötigen, machen Sie folgendes:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
        recyclerView.setLayoutManager(layoutManager);
        APICallMethod();
        YOURADAPTER = new YOURADAPTER(ACTIVITY_NAME.this, YOUR_LIST); // you can use that adapter after for loop in response(APICALLMETHOD)
        recyclerView.setAdapter(YOURADAPTER);

wenn Sie GridLayoutManager verwenden möchten, verwenden Sie RecyclerView so:

        RecyclerView recyclerView = findViewById(R.id.rvNumbers);
        recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); // 3 is number of columns.
        adapter = new MyRecyclerViewAdapter(this, data);
        recyclerView.setAdapter(adapter);
0
Abhinav Gupta

Für mich war das Problem mit meiner activity_main.xml (21), in der das recycleView keine ID hatte.

activity_main.xml (21)

 <Android.support.v7.widget.RecyclerView
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="8dp"
    Android:layout_marginLeft="8dp"
    Android:layout_marginTop="8dp"
    Android:layout_marginEnd="8dp"
    Android:layout_marginRight="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/button3"
    tools:listitem="@layout/transaction_list_row" />

activity_main.xml

<Android.support.v7.widget.RecyclerView

    Android:id="@+id/transac_recycler_view"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="8dp"
    Android:layout_marginLeft="8dp"
    Android:layout_marginTop="8dp"
    Android:layout_marginEnd="8dp"
    Android:layout_marginRight="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/button3"
    />

Es hat funktioniert, als ich ein Android: id = "@ + id/transac_recycler_view" zu der Activity_main.xml (21) recycleView hinzugefügt habe

0
DAVID KATHOH