2016-03-21 12 views
9

https://github.com/h6ah4i/android-advancedrecyclerviewErweiterte RecyclerView Bibliothek - Codebeispiele

Dies scheint eine große Bibliothek in Bezug auf das, was Funktionalität bietet. Es fehlt jedoch eine gute Dokumentation. Es hat ein "Tutorial" auf Swipeable Elemente, aber wie einige andere Menschen konnte ich es nicht folgen.

Hat jemand ein funktionierendes Beispiel oder kann jemand einen einfachen Use Case machen, um einen Gegenstand zu wischen und einen Knopf darunter unter Verwendung dieser Bibliothek zu zeigen? Es wäre nützlich für viele Leute, die an dieser Funktionalität interessiert sind.

+1

Ich kann keine Dokumentation finden, wenn ich die Abhängigkeit zum Projekt hinzugefügt habe. Es sagt sehr gut, was es mit der Beispiel-App tun kann, aber wenn es darum geht, es zu benutzen ... Ich bin verloren. Hoffe, du findest jemanden, der mehr über diese Bibliothek weiß, ich bin dabei, Alternativen auszuprobieren:/ – Jethro

+0

Es gibt [eine Alternative] (https://github.com/davideas/FlexibleAdapter/wiki) mit etwas besserer Dokumentation. –

+0

Wow, ich denke, das könnte die Antwort auf meine Fragen und Wünsche sein! Scheint auch sehr dokumentiert, aber ich muss es mir noch anschauen. Vielen Dank. Wenn Sie möchten, machen Sie Ihren Kommentar eine Antwort. – iBobb

Antwort

1

Ich fand die Bibliothek gut dokumentiert und einfach zu bedienen.

Ich habe den Code aus dem Originalbeispiel ausgewählt, das benötigt wurde, um Swipe mit Button darunter zu implementieren, der here gefunden werden kann.

Die folgenden Tipps helfen Ihnen hoffentlich, das Muster, in dem die Beispiele implementiert werden, noch einfacher zu verstehen.

Übersicht

createAdapter Methode in LauncherPageFragment gibt einen Überblick darüber, welche Aktivität enthält, welche

Jede Probe entweder der beiden Muster folgen Funktion:

Grundbeispiel
Im Falle einer Basisprobe sind der für die Recycleransicht benötigte Adapter und Viewhalter in der sa definiert ich Aktivitätsklasse.

Complex Probe
Bei komplexen Probe der Adapter und Ansicht Halter getrennt und die Recycler Ansicht erstellt wird selbst in einem anderen Fragment definiert ist.
In solchen Fällen gibt es ein zusätzliches Fragment, das in Aktivität hinzugefügt wird. Diese sind im Paket com.h6ah4i.android.example.advrecyclerview.common.fragment enthalten, mit dem die Daten bereitgestellt werden, die in der Recycleransicht angezeigt werden müssen.

Für die Swipe mit Taste, die Sie erstellen müssen RecyclerViewTouchActionGuardManager (Scrollen zu unterdrücken, während Swipe-abtun Animation läuft) und RecyclerViewSwipeManager einen umhüllten Adapter zu erstellen.

Für den Anschluss müssen Sie SwipeableItemAdapter Schnittstelle einfügen und Halter müssen AbstractSwipeableItemViewHolder anstelle von RecyclerView.ViewHolder erweitern.

Hinweis: Ich habe mich verändert Umsetzung onSetSwipeBackground In Originalprobe stellte es einige Hintergrundinformationen über die itemview.
Dies wurde nicht benötigt, wenn die Ansicht darunter angezeigt werden soll. Außerdem verursachte es unnötige Neuzeichnungen.

1

Sie können besser ausführliche Dokumentation in der Haupt-Website finden: https://advancedrecyclerview.h6ah4i.com

und die folgend von der swipeable Seite in der Dokumentation kopiert wird:


Schritt 1. die Adapter Stellen unterstützt stabil IDs

Dieser Schritt ist sehr wichtig. Falls der Adapter nicht stabil & eindeutige IDs zurückgibt, wird dazu führen, dass einige seltsame Verhalten (falsche Animationen, NPE, etc ...)

class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
    MyAdapter() { 
     setHasStableIds(true); 
    } 

    @Override 
    public long getItemId(int position) { 
     // requires static value, it means need to keep the same value 
     // even if the item position has been changed. 
     return mItems.get(position).getId(); 
    } 
} 

Schritt 2. Ändern Layoutdatei von Element Ansichten

Wrap Inhalt Ansichten mit anderen FrameLayout whitch hat @+id/container ID.

<!-- for itemView --> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="56dp"> 
    <!-- Content View(s) --> 
    <TextView 
     android:id="@android:id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center"/> 
</FrameLayout> 

⏬ ⏬ ⏬

<!-- for itemView --> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="56dp"> 

    <!-- for getSwipeableContainerView() --> 
    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <!-- Content View(s) --> 
     <TextView 
      android:id="@android:id/text1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center"/> 

    </FrameLayout> 
</FrameLayout> 

Schritt 3. Ändern ViewHolder

  1. ändern Elternklasse AbstractSwipeableItemViewHolder.
  2. Implement getSwipeableContainerView() Methode.

Hinweis: Die AbstractSwipeableItemViewHolder Klasse ist eine Komfort-Klasse, die boilerplace Methoden der `SwipeableItemViewHolder implementiert.

⏬ ⏬ ⏬

class MyAdapter ... { 
    static class MyViewHolder extends AbstractSwipeableItemViewHolder { 
     TextView textView; 
     FrameLayout containerView; 

     public MyViewHolder(View v) { 
      super(v); 
      textView = (TextView) v.findViewById(android.R.id.text1); 
      containerView = (FrameLayout) v.findViewById(R.id.container); 
     } 

     @Override 
     public View getSwipeableContainerView() { 
      return containerView; 
     } 
    } 
} 

Schritt 4. Umsetzung des SwipeableItemAdapter Schnittstelle

class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
    ... 
} 

⏬ ⏬ ⏬

class MyAdapter 
     extends RecyclerView.Adapter<MyAdapter.MyViewHolder> 
     implements SwipeableItemAdapter<MyAdapter.MyViewHolder> { 

    @Override 
    public int onGetSwipeReactionType(MyViewHolder holder, int position, int x, int y) { 
     // Make swipeable to LEFT direction 
     return Swipeable.REACTION_CAN_SWIPE_LEFT; 
    } 

    @Override 
    public void onSetSwipeBackground(MyViewHolder holder, int position, int type) { 
     // You can set background color/resource to holder.itemView. 

     // The argument "type" can be one of the followings; 
     // - Swipeable.DRAWABLE_SWIPE_NEUTRAL_BACKGROUND 
     // - Swipeable.DRAWABLE_SWIPE_LEFT_BACKGROUND 
     // (- Swipeable.DRAWABLE_SWIPE_UP_BACKGROUND) 
     // (- Swipeable.DRAWABLE_SWIPE_RIGHT_BACKGROUND) 
     // (- Swipeable.DRAWABLE_SWIPE_DOWN_BACKGROUND) 

     if (type == Swipeable.DRAWABLE_SWIPE_LEFT_BACKGROUND) { 
      holder.itemView.setBackgroundColor(Color.YELLOW); 
     } else { 
      holder.itemView.setBackgroundColor(Color.TRANSPARENT); 
     } 
    } 

    @Override 
    public SwipeResultAction onSwipeItem(MyViewHolder holder, int position, int result) { 
     // Return sub class of the SwipeResultAction. 
     // 
     // Available base (abstract) classes are; 
     // - SwipeResultActionDefault 
     // - SwipeResultActionMoveToSwipedDirection 
     // - SwipeResultActionRemoveItem 
     // - SwipeResultActionDoNothing 

     // The argument "result" can be one of the followings; 
     // 
     // - Swipeable.RESULT_CANCELED 
     // - Swipeable.RESULT_SWIPED_LEFT 
     // (- Swipeable.RESULT_SWIPED_UP) 
     // (- Swipeable.RESULT_SWIPED_RIGHT) 
     // (- Swipeable.RESULT_SWIPED_DOWN) 

     if (result == Swipeable.RESULT_LEFT) { 
      return new SwipeResultActionMoveToSwipedDirection() { 
       // Optionally, you can override these three methods 
       // - void onPerformAction() 
       // - void onSlideAnimationEnd() 
       // - void onCleanUp() 
      }; 
     } else { 
      return new SwipeResultActionDoNothing(); 
     } 
    } 
} 

Schritt 5. Ändern Initialisierung von RecyclerView

Legen Sie einige zusätzliche Initialisierung in Ihrem Activity/Fragment.

  1. Instanziieren RecyclerViewSwipeManager.
  2. Erstellen Sie einen verpackten Adapter und setzen Sie ihn auf RecyclerView.
  3. Befestigen Sie RecyclerView an RecyclerViewSwipeManager.

void onCreate() { 
    ... 

    RecyclerView recyclerView = findViewById(R.id.recyclerView); 
    MyAdapter adapter = new MyAdapter(); 

    recyclerView.setAdapter(adapter); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
} 

⏬ ⏬ ⏬

void onCreate() { 
    ... 

    RecyclerView recyclerView = findViewById(R.id.recyclerView); 
    RecyclerViewSwipeManager swipeManager = new RecyclerViewSwipeManager(); 

    MyAdapter adapter = new MyAdapter(); 
    RecyclerView.Adapter wrappedAdapter = swipeManager.createWrappedAdapter(adapter); 

    recyclerView.setAdapter(wrappedAdapter); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

    // disable change animations 
    ((SimpleItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false); 

    swipeManager.attachRecyclerView(recyclerView); 
} 

ich meine Antwort hoffen helfen.

+0

Während dieser Link die Frage beantworten kann, ist es besser um die wesentlichen Teile der Antwort hier einzubeziehen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/16457078) –

+0

@ Dev-iL können Sie bitte die Rezension jetzt ändern? – Zacktamondo

+0

Hallo @ Zacktamondo, ich bin mir nicht sicher, was du meinst - die Rezension bezieht sich auf eine vorherige Version des Posts, so dass jeder, der darauf stößt, sieht, dass der Post bearbeitet wurde _nachher_ - was das beabsichtigte Ergebnis eines Kommentars ist. Ich habe dir keine -1 gegeben, und egal, wie du ein neuer Nutzer bist und dein Verhalten auf SO ermutigt wird (dh auf eine Rezension reagierst, indem du deinen Beitrag redest) - du kannst meine +1 haben :) –