4

Ich muss mehrere RecyclerViews programmatisch zu einem Fragment hinzufügen. Ich habe es geschafft, einen RecyclerView mit XML-Layout (unten) einzubauen, und es funktioniert gut, aber wenn ich versuche, überhaupt irgendwelche Programme hinzuzufügen, erscheint nicht einmal einer in der Fragmentansicht, obwohl die zurückgegebenen RecyclerViews nicht null sind. Da meine Datenquelle Web-API-gesteuert ist, kann ich keine bestimmte Anzahl von RecyclerViews in einem XML-Layout hinzufügen, da sich die Anzahl von Zeit zu Zeit ändert, daher muss sie programmatisch durchgeführt werden. Ich habe verschiedene Methoden ausprobiert, aber alle Ergebnisse sind gleich, zB: kein RecyclerView. Ich muss auch TextViews über jedem RecyclerView als Header hinzufügen, was ich bereits getan habe und sie funktionieren perfekt, aber sind aus dem unten stehenden Code entfernt, um es einfacher zu verdauen. Alles, was ich tun muss, um mein Projekt zu beenden, ist das Hinzufügen der mehreren RecyclerViews. Ich hoffe, dass jemand helfen kann?Android: Programmgesteuertes Hinzufügen mehrerer RecyclerViews in einem Fragment

Fragment:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    { 
    svv = new ScrollView(getActivity()); 
    svv.setLayoutParams(new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT, ScrollView.LayoutParams.WRAP_CONTENT)); 
    linLayout = new LinearLayout(getActivity()); 
    linLayout.setOrientation(LinearLayout.VERTICAL); 
    linLayoutParam = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 

    View rootView = inflater.inflate(R.layout.fragment_root, container, false); 
    HorizontalScrollView svh; 
    RecyclerView itemsListing; 

    int top = 100; 
    for(int i = 0; i < itemCount; i++) { 
    String strSubURL = myListItem.myListUrls.get(i).toString(); 
    sharedData.setCurrMyURL(String.valueOf(strSubURL)); 

    // Below is where the problems start 

    // This works fine but only provides one recyclerview 
    //itemsListing = (RecyclerView) rootView.findViewById(R.id.items_listing); 

    // This does not work at all, showing zero recyclerviews even though the views are not null and are therefore actually created 
    itemsListing = new RecyclerView(inflater.getContext()); 

    itemsListing.setPadding(0, top, 0, 0); 
    mLayoutManager = new LinearLayoutManager(itemsListing.getContext(), LinearLayoutManager.HORIZONTAL, false); 
    itemsListing.setLayoutManager(mLayoutManager); 
    mAdapter = new ItemsListingAdapter(mItems, this); 
    itemsListing.setAdapter(mAdapter); 
    svh = new HorizontalScrollView(getActivity()); 
    svh.setPadding(0, top, 0, 0); 
    top=top+400; 
    } 
    svv.addView(linLayout); 
    RelativeLayout mainLayout = (RelativeLayout) rootView.findViewById(R.id.item_layout); 
    mainLayout.addView(svv); 
    return rootView; 
    } 

XML Layout:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/item_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="#000000" 
    tools:context="com.myco.myapp.items.listing.ItemsListingListingFragment"> 
    <android.support.v7.widget.RecyclerView 
    android:id="@+id/items_listing" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
    </RelativeLayout> 
+0

Ich verstehe nicht, warum Sie:

class MySection extends StatelessSection { String title; List<String> list; public MySection(String title, List<String> list) { // call constructor with layout resources for this Section header, footer and items super(R.layout.section_header, R.layout.section_item); this.title = title; this.list = list; } @Override public int getContentItemsTotal() { return list.size(); // number of items of this section } @Override public RecyclerView.ViewHolder getItemViewHolder(View view) { // return a custom instance of ViewHolder for the items of this section return new MyItemViewHolder(view); } @Override public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { MyItemViewHolder itemHolder = (MyItemViewHolder) holder; // bind your view here itemHolder.tvItem.setText(list.get(position)); } @Override public RecyclerView.ViewHolder getHeaderViewHolder(View view) { return new SimpleHeaderViewHolder(view); } @Override public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; // bind your header view here headerHolder.tvItem.setText(title); } } 

Dann Sie die RecyclerView mit den Abschnitten einrichten muss es tun: Hier ist eine Lösung, implementieren Sie eine endliche Anzahl von Recyclerviews und jede Recyclerview Zeile enthält eine andere Recyclerview. So, jetzt können Sie so viele Recyclerview-Elemente anzeigen, wie Sie möchten – suku

+0

Hallo @ suku, danke für Ihre Antwort, obwohl ich es überhaupt nicht verstehe! Ich habe eine Web-API, die Sammlungen kategorisiert, und jede Sammlung hat eine Kopfzeile. Diese Sammlungen sind dynamisch und die Anzahl von ihnen, Elemente in ihnen und Überschriften werden regelmäßig geändert. In iOS verwende ich programmatisch erstellte Collection-Ansichten mit Header-Labels, und das funktioniert perfekt. In Android habe ich auch statische XML-Recycler-Ansichten geschrieben, in denen sich die Sammlungen nicht ändern und wieder funktionieren sie einwandfrei. Wollen Sie also sagen, dass ich programmatisch erstellte Recycler-Ansichten in einer für xml deklarierten Recycler-Ansicht verschachteln kann? – partynose

+0

Jetzt verstehe ich, was Sie versuchen zu tun. überprüfe meine Antwort aus – suku

Antwort

5

Sie brauchen nicht mehrere RecyclerViews, Sie können es mit einem erreichen. Mit der Bibliothek SectionedRecyclerViewAdapter Sie können Gruppe der Objekte in den Abschnitten und einen Header zu jedem Abschnitt hinzufügen:

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); 

// Create your sections with the list of data you got from your API 
MySection data1Section = new MySection("Data 1", data1List); 
MySection data2Section = new MySection("Data 2", data2List); 

// Add your Sections to the adapter 
sectionAdapter.addSection(data1Section); 
sectionAdapter.addSection(data2Section); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
recyclerView.setAdapter(sectionAdapter); 
+0

Danke @Gustavo ... das klingt genau nach dem was ich gesucht habe. Ich werde es einen Wirbel geben ... danke, danke .... :) – partynose

+0

Wie kann ich 2 Artikel für jeden Abschnitt in der gleichen Zeile anzeigen und in der Lage, nach links und rechts für weitere Artikel zu scrollen? –

2

Wie Sie mehrere Sammlungen haben und und jede Sammlung hat eine Liste der Elemente, die angezeigt werden sollen. Dies kann einfach mit expandable listview durchgeführt werden. Sie zeigen eine Liste von Headern an, die beim Klicken auf die Liste der Elemente unter der Kopfzeile erweitert werden. Here ist ein Tutorial zur Implementierung

+0

Danke @suku. Ich werde das untersuchen, obwohl ich nicht möchte, dass etwas "erweiterbar" ist, es muss von Anfang an erweitert und in einer Bildlaufansicht dargestellt werden. Es ist für einen Medienplayer mit vielen Inhalten gedacht, der von Anfang an sichtbar sein sollte und mit statischen Deklarationen anstelle von dynamisch mit anderen Recycleransichten übereinstimmen muss. Ich glaube, Gustavo hat mir genau das gegeben, was ich brauche, aber deine Hilfe wird nicht weniger geschätzt. Ich werde deine Antwort auch akzeptieren. Vielen Dank nochmal ... :) – partynose

Verwandte Themen