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)

  • Wie kann CursorLoader die Ansicht automatisch aktualisieren, auch wenn die App inaktiv ist?
  • Android-Studio dauert zu viel Speicher
  • Ausblenden von Elementen in der Kontext-Aktionsleiste (CAB) dynamisch, wenn mehrere Elemente ausgewählt sind
  • Ändern Sie klickbare TextView-Farbe auf Fokus und klicken Sie auf?
  • Aktivitäten Stapel
  • Assoziieren App mit Epub-Format
  • 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,

  • Send Post Request mit Params mit Retrofit
  • Wie bekomme ich die Webseiteninhalte aus einer WebView?
  • Wie greife ich aus dem Adapter auf ListView zu
  • So legen Sie den Standardwert des Switch-Widgets in Android fest
  • Überprüfen Sie, ob Datei auf SD-Karte auf Android vorhanden ist
  • Regular Expression In Android für Passwort-Feld
  • 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.