4

Bir parçaya programlı olarak birden çok RecyclerViews eklemem gerekir. Xml mizanpajı kullanarak bir RecyclerView'ı dahil etmeyi başardım (aşağıda) ve iyi çalışıyor, ancak programlı olarak herhangi bir ekleme yapmaya çalıştığımda, geri dönen RecyclerViews null olmasa bile parça görünümünde bir tane bile görünmüyor. Veri kaynağım web API'sı olduğundan, gerekli sayı zaman içinde değişeceğinden, belirli bir sayıda RecyclerViews'ı bir xml düzeninde ekleyemem, dolayısıyla programlı olarak yapılmalıdır. Bir dizi farklı yöntem denedim ancak tüm sonuçlar aynı, örneğin: Bir RecyclerView değil. Ayrıca, her bir RecyclerView öğesinin üst kısmındaki TextView'ları, zaten yaptıkları ve mükemmel şekilde çalıştıkları üstbilgiler olarak eklemem gerekiyor, ancak sindirimi kolaylaştırmak için aşağıdaki koddan kaldırılıyor. Projemi bitirmek için yapabileceğim tek şey, birden çok RecyclerViews eklemek. Umarım birileri yardım edebilir mi?Android: Programlı bir parçaya birden çok RecyclerViews ekleme

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 Düzen:

<?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

Neden seni anlamıyorum Bunu yapmak zorunda: İşte bir çözüm, sınırlı sayıda geridönüşüm izlemesi gerçekleştirin ve her geri dönüşümlü görüşme sırası başka bir geri dönüşüm görüntülemesi içeriyor. Yani şimdi – suku

+0

Merhaba @suku istediğiniz kadar geri dönüşüm öğeleri gösterebilir, cevabınız için teşekkür ederim, her ne kadar anlamadım ki! Koleksiyonları kategorilere ayıran bir web API'm var ve her koleksiyonun bir başlığı var. Bu koleksiyonlar dinamiktir ve bunların sayısı, içindeki öğeler ve başlıklar periyodik olarak değişecektir. IOS'ta, program aracılığıyla oluşturulmuş koleksiyon görünümlerini başlık etiketleriyle kullanır ve bu mükemmel bir şekilde çalışır. Android'de, koleksiyonların değişmediği ve yine iyi çalıştığı yerlerde statik XML geri dönüştürücüsü görünümleri yazdım. Yani, programlı olarak oluşturulan geri dönüştürücü görünümlerini bir xml bildirimli geri dönüştürücü görünümünde yerleştirebileceğimi mi söylüyorsunuz? – partynose

+0

Şimdi ne yapmaya çalıştığını anlıyorum. Cevabımı kontrol et – suku

cevap

5

Birden çok RecyclerViews'a ihtiyacınız yoktur, bunu biriyle başarabilirsiniz. kütüphanede SectionedRecyclerViewAdapter ile grup Bölümlerinizdeki öğeler ve her bölüme bir başlık ekleyebilirsiniz:

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); 
    } 
} 

Sonra Bölümler ile RecyclerView kurmak:

// 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

Teşekkür ederim @Gustavo ... Bu tam olarak aradığım şey gibi geliyor. Ben bir girdap vereceğim ... Teşekkür ederim, teşekkür ederim .... :) – partynose

+0

Aynı satırdaki her bölüm için 2 öğe gösterebilir ve daha fazla öğe için sola ve sağa kaydırılabilir? –

2

Birden koleksiyonları ve var ve her koleksiyon görüntülenmesini istediğiniz öğelerin bir listesini sahip olduğu için. Bu expandable listview kullanarak kolayca yapılabilir. Üstbilgideki öğelerin listesini göstermek için tıklatmada genişleyen başlıkların bir listesini görüntülersiniz. Here, uygulamasıyla ilgili bir öğreticidir

+0

Teşekkür ederim @suku. Her ne kadar 'genişletilebilir' olmak için bir şey istememem rağmen, bunun içine bakacağım, en baştan genişletilmeli ve kaydırma görünümünde ayarlanmalı. Başlangıçta görülebilmesi gereken ve dinamikten ziyade statik beyanlarla diğer geri dönüşümcü görünümleri ile eşleşmesi gereken bir kitle içeriğine sahip bir medya oynatıcı için. Gustavo'nın bana tam olarak ihtiyacım olan şeyi verdiğini düşünüyorum ama yardımın daha az takdir edilmiyor. Cevabını da kabul edeceğim. Tekrar teşekkürler ... :) – partynose

İlgili konular