RecyclerView.getChild (Index) zeigt null an, wenn die Liste gescrollt wird (Index wird durcheinander gebracht)

Ich habe mit SwipeableRecyclerView für meine Android-Anwendung für die Aktivierung Swipes für meine recyclerView. RecyclerView enthält eine Liste von cardViews.

Ich habe versucht, rückgängig machen Funktionalität für Karten, die gelöscht werden, wenn nach links abwischen (erste Swipe zeigt rückgängig, nächste Swipe Trigger löschen)

  • Exportieren Sie unsigned apk aus einem Gradle Project in Android Studio
  • String-Date-Konvertierung mit Nanosekunden
  • AndroidStudio Emulator "wird nicht ausgeführt, wenn Sie Google Play Services nicht aktualisieren"
  • Ändern der Layouts programmatisch (als Animation) bis zu "wrap_content"
  • Füge ein Attribut am "application" -Tag im AndroidManifest von einem Cordova-Plugin hinzu
  • Wie kann man das Bild (Bitmap) auf eine bestimmte Größe ändern?
  • Ich versuche den folgenden Code (teilweise arbeiten, denke ich)

    SwipeableRecyclerViewTouchListener srvTouchListner = new SwipeableRecyclerViewTouchListener(rvTimerList, new SwipeableRecyclerViewTouchListener.SwipeListener(){ @Override public boolean canSwipe(int i) { return true; } @Override public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] ints) { for(int position : ints){ View view = recyclerView.getChildAt(position); if (view.getTag(R.string.card_undo) == null) { if(viewStack == null) { saveToViewStack(position, view); final ViewGroup viewGroup = (ViewGroup) view.findViewById(R.id.time_card2); view.setTag(R.string.card_undo, "true"); viewGroup.addView(view.inflate(TimerSummary.this, R.layout.timeslot_card_undo, null)); } } else { Log.d(TAG, "Removing Item"); deleteTimeSlot(timerInstanceList.get(position)); Toast.makeText(TimerSummary.this, "Deleted!", Toast.LENGTH_SHORT).show(); timerInstanceList.remove(position); finalSummaryAdapter.notifyItemRemoved(position); } } finalSummaryAdapter.notifyDataSetChanged(); } @Override public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] ints) { for (int position:ints){ View view = recyclerView.getChildAt(position); if(view.getTag(R.string.card_undo) != null && view.getTag(R.string.card_undo).equals("true")){ viewStack = null; recyclerView.setAdapter(finalSummaryAdapter); } } } }); 

    Wenn Gegenstände mehr sind (muss scrollen)

     View view = recyclerView.getChildAt(position); 

    Gibt eine Nullreferenz zurück, die einen App-Crash verursacht.

    Ich bezweifle, dass ich die falsche Methode zum Aufnehmen benutzt habe. Ich sollte etwas mit dem Betrachter in Verbindung bringen, ich bin eigentlich irgendwie verwirrt darüber, wie man die Ansicht bekommt, die du von viewholder willst.

    Wenn irgendjemand irgendetwas teilen kann, was hilft, dann wird das großartig! Ich werde gerne mehr Infos machen, wenn jemand es will,

  • Setzen Sie die tatsächliche Textauffüllung in TextView mit zusammengesetzten Zeichenketten ein
  • Youtube API Berechtigung 403 Verbotener Fehler
  • Umwandlung Datum in "April 6th, 2012" Format
  • Wie benutzt man Android MVVM Muster mit Fragmenten?
  • Finden Sie Abstand zwischen zwei Punkten auf Karte mit Google Map API V2
  • Was ist der Unterschied zwischen alignBaseline und alignBottom in Android?
  • 3 Solutions collect form web for “RecyclerView.getChild (Index) zeigt null an, wenn die Liste gescrollt wird (Index wird durcheinander gebracht)”

    Sie sollten findViewHolderForAdapterPosition . https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForAdapterPosition(int)

    Denken Sie daran, dass es null zurückgibt, wenn die Position nicht ausgelegt ist (zB außerhalb der Grenzen oder entfernt).

    Da ich nicht genügend Reputationspunkte habe, um auf @ yigits Antwort zu kommentieren, dachte ich, dass ich einen Weg geben würde, alle viewHolders von einem RecyclerView unabhängig von dem, was derzeit in der viewGroup ist, abzurufen. Sogar mit findViewHolderForAdapterPosition und ForLayoutPosition können wir noch eine Nullinstanz des ViewHolders im RecyclerView erhalten.

    Um dies zu umgehen, können wir findViewHolderForItemId [ 1 ] verwenden und die ID des viewHolders im Adapter mit RecyclerView.Adapter # getItemId (int position) [ 2 ]

     for (int i = 0; i < mAdapter.getItemCount(); i++) { RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForItemId(mAdapter.getItemId(i)); } 
    1. https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForItemId(int)
    2. https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#getItemId(int)

    Verwenden Sie findFirstCompletelyVisibleItemPosition () & findLastVisibleItemPosition () Methoden auf LayoutManager von Ihrem RecyclerView, um herauszufinden, dass das Kind, das Sie suchen, sichtbar ist oder nicht. Wenn es sichtbar ist, dann können Sie getChild (Index) verwenden, um die ViewHolder-Instanz dieses bestimmten Kindes zu erhalten, und es wäre nicht null sonst könnte es null sein (Wenn das Kind nicht darin ist). Falls Ihr Kind nicht sichtbar ist, machen Sie nur Änderungen an Ihrer spezifischen Position. List-Objekt, das nächste Mal, wann immer es sichtbar sein wird, hat eine aktualisierte Benutzeroberfläche.

     if (selectedPosition >= linearLayoutManager.findFirstVisibleItemPosition() && selectedPosition <= linearLayoutManager.findLastVisibleItemPosition()){ linearLayoutManager.getChildAt(selectedPosition).setBackgroundResource(0); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.