2015-04-15 6 views
28

Ich konnte kein besseres Beispiel für die Verwendung RecyclerView mit StaggeredGridLayoutManager finden. Nicht einmal in Android Docs.Kein gutes Beispiel über RecyclerView und StaggeredGridLayoutManager in Android Docs

Q1. Ich brauche einige Beispiele, die eine korrekte Erklärung über die Verwendung von RecyclerView mit StaggeredGridLayoutManager geben können.

Q2. Kann mir jemand sagen, ob es möglich ist, folgendes Layout Bisher habe ich diese link gefunden habe mit RecyclerView mit StaggeredGridLayoutManager

example

zu schaffen, das nicht nützlich ist.

Ich fand auch diese link für cardslib, aber es ist zu komplex in der Umsetzung und hat zu viele Abhängigkeiten, die meine App-Größe unnötig erhöhen wird.

+0

Sie dieses Beispiel hilfreich sein können: https://github.com/dbleicher/recyclerview-grid-quickreturn – MojoTosh

+0

ich dieses Beispiel mag beide für RecyclerView und StaggeredGridLayoutManager: https: // Führer .codepath.com/android/Verwenden der RecyclerView – Muz

Antwort

3

Angenommen, Sie haben bereits einen Adapter erstellt und den RecyclerView initialisiert, sollte der folgende Code das tun, wonach Sie suchen.

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); 
recyclerView.setLayoutManager(staggeredGridLayoutManager); 

Für weitere Referenz und Dokumentation klicken Sie bitte auf den folgenden Link: https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html

29

Für diejenigen, die noch auf diese Frage der Landung auf.

Sie können den folgenden Code nach Ihren Bedürfnissen ändern:
Erste Abhängigkeits Bibliotheken für Android RecyclerView und CardView

compile 'com.android.support:appcompat-v7:23.4.0' 
compile 'com.android.support:cardview-v7:23.4.0' 
compile 'com.android.support:recyclerview-v7:23.4.0' 

Ihre Haupttätigkeit Layout activity_main.xml wie

sein wird, fügen Sie einfach
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="7dp" 
    tools:context=".MainActivity"> 

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

</RelativeLayout> 


Definieren Sie das Layout einer Karte in einer Layoutdatei mit dem Namen book_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:id="@+id/card_view" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
card_view:cardUseCompatPadding="true"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/BookName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:textColor="@android:color/black" 
     android:textSize="16sp" /> 

    <TextView 
     android:id="@+id/AuthorName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_below="@+id/country_photo" 
     android:background="#1976D2" 
     android:gravity="center_horizontal" 
     android:paddingBottom="8dp" 
     android:paddingTop="8dp" 
     android:text="@string/hello_world" 
     android:textColor="#ffffff" 
     android:textSize="13sp" /> 
</LinearLayout> 

</android.support.v7.widget.CardView> 


dieses Layout als eine Klasse definieren ItemObject.java

public class ItemObject 
{ 
    private String _name; 
    private String _author; 

    public ItemObject(String name, String auth) 
    { 
     this._name = name; 
     this._author = auth; 
    } 

    public String getName() 
    { 
     return _name; 
    } 

    public void setName(String name) 
    { 
     this._name = name; 
    } 

    public String getAuthor() 
    { 
     return _author; 
    } 

    public void setAuthor(String auth) 
    { 
     this._author = auth; 
    } 
} 


einen Adapter benutzerdefinierten definieren SampleRecyclerViewAdapter die Karten aufzufüllen

public class SampleRecyclerViewAdapter extends RecyclerView.Adapter<SampleViewHolders> 
{ 
    private List<ItemObject> itemList; 
    private Context context; 

    public SampleRecyclerViewAdapter(Context context, 
     List<ItemObject> itemList) 
    { 
     this.itemList = itemList; 
     this.context = context; 
    } 

    @Override 
    public SampleViewHolders onCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     View layoutView = LayoutInflater.from(parent.getContext()).inflate(
      R.layout.book_list_item, null); 
     SampleViewHolders rcv = new SampleViewHolders(layoutView); 
     return rcv; 
    } 

    @Override 
    public void onBindViewHolder(SampleViewHolders holder, int position) 
    { 
     holder.bookName.setText(itemList.get(position).getName()); 
     holder.authorName.setText(itemList.get(position).getAuthor()); 
    } 

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


Wir würden auch einen Viewholder für jede ItemObject benötigen.So definieren Sie eine Klasse SampleViewHolders

public class SampleViewHolders extends RecyclerView.ViewHolder implements 
    View.OnClickListener 
{ 
    public TextView bookName; 
    public TextView authorName; 

    public SampleViewHolders(View itemView) 
    { 
     super(itemView); 
     itemView.setOnClickListener(this); 
     bookName = (TextView) itemView.findViewById(R.id.BookName); 
     authorName = (TextView) itemView.findViewById(R.id.AuthorName); 
    } 

    @Override 
    public void onClick(View view) 
    { 
     Toast.makeText(view.getContext(), 
      "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT) 
      .show(); 
    } 
} 

Jetzt in MainActivity, weisen eine Instanz von StaggeredGridLayoutManager zu recycler_view zu definieren, wie die Komponenten angezeigt.
Auch die Karten mit Instanz von SampleRecyclerViewAdapter bevölkern, wie

public class MainActivity extends AppCompatActivity 
{ 
    private StaggeredGridLayoutManager _sGridLayoutManager; 

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

     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     recyclerView.setHasFixedSize(true); 

     _sGridLayoutManager = new StaggeredGridLayoutManager(2, 
      StaggeredGridLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(_sGridLayoutManager); 

     List<ItemObject> sList = getListItemData(); 

     SampleRecyclerViewAdapter rcAdapter = new SampleRecyclerViewAdapter(
      MainActivity.this, sList); 
     recyclerView.setAdapter(rcAdapter); 
    } 

    private List<ItemObject> getListItemData() 
    { 
     List<ItemObject> listViewItems = new ArrayList<ItemObject>(); 
     listViewItems.add(new ItemObject("1984", "George Orwell")); 
     listViewItems.add(new ItemObject("Pride and Prejudice", "Jane Austen")); 
     listViewItems.add(new ItemObject("One Hundred Years of Solitude", "Gabriel Garcia Marquez")); 
     listViewItems.add(new ItemObject("The Book Thief", "Markus Zusak")); 
     listViewItems.add(new ItemObject("The Hunger Games", "Suzanne Collins")); 
     listViewItems.add(new ItemObject("The Hitchhiker's Guide to the Galaxy", "Douglas Adams")); 
     listViewItems.add(new ItemObject("The Theory Of Everything", "Dr Stephen Hawking")); 

     return listViewItems; 
    } 
} 

folgt Output so etwas wie dieses Two Colums Output

Für Ihre Anforderung aussehen wird, können Sie eine Image in book_list_item.xml integrieren und sie bevölkern entsprechend in SampleViewHolders
Beachten Sie auch, um die Anzahl der Spalten von 2 bis 3 zu ändern.
Hier ist another simple tutorial

0

Unsere Freunde "Henry"Sie könnten Erklärung in MainActivity als

_sGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); 
recyclerView.setLayoutManager(_sGridLayoutManager); 

die wie folgt Three Column Output

eine Ausgabe geben ändern müssen eine gute und einfache here erklären.

Und ich denke, unter Konstruktor für die meisten Anwendungen geeignet ist:

StaggeredGridLayoutManager(num , LinearLayoutManager.VERTICAL) 
// where 'num' is your columns count 
// LinearLayoutManager.VERTICAL = 1 
Verwandte Themen