2016-02-02 14 views
5

Youtube uygulamasına benzer bir Android tv uygulaması oluşturmaya çalışıyorum. ve bunu yapmak için Sofa kitaplığını kullanıyorum. Şimdi sorun, RowsFragment odaklanmamış olsa bile, RowsFragment öğelerinde tek tek öğeler için başlıkları göstermeye çalışıyorum. her zaman nasıl üstbilgileri gösterir RowsFragment

private void loadRowsCustom() { 
     adapter = new ArrayObjectAdapter(); 

     int split = 3; 
     int rowsFragmentCount = videoList.size()/split + (videoList.size() % split != 0 ? 1 : 0); 

     for (int i = 0; i < rowsFragmentCount; i++) { 

      ListRowPresenter lrp = new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE); 
      ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(lrp); 

      String category = "Category"; 

      for (int j = 0; j < split && (i * split + j) < videoList.size(); j++) { 
       Video[] videos = videoList.get(i * split + j); 
       ArrayObjectAdapter rowCollAdapter = new ArrayObjectAdapter(new VideoPresenter()); 
       rowCollAdapter.addAll(0, Arrays.asList(videos)); 
       ListRow row = new ListRow(new HeaderItem(videos[0].category),rowCollAdapter); 
       rowsAdapter.add(row); 
       category = videos[0].category; 
      } 

      ArrayObjectAdapter fragmentAdapter = new ArrayObjectAdapter(); 
      RowsSupportFragment rowsSupportFragment = new RowsSupportFragment(); 
      rowsSupportFragment.setAdapter(rowsAdapter); 
      rowsSupportFragment.enableRowScaling(false); 
      fragmentAdapter.add(rowsSupportFragment); 
      adapter.add(new ListRow(new HeaderItem(category), fragmentAdapter)); 
     } 

     browseSupportFragment.setAdapter(adapter); 
     browseSupportFragment.setHeadersState(BrowseSupportFragment.HEADERS_ENABLED); 
     browseSupportFragment.setOnSearchClickedListener(searchClickListener); 
     browseSupportFragment.setOnItemViewClickedListener(browseClickListener); 
     browseSupportFragment.setTitle("Google Videos"); 
    } 

browseFragment

içine veri kümesi yükleme kodu aşağıdaki gerekli ve mevcut uygulama Aşağıda ekran olarak tarif edilmektedir: bakan olanlar için

enter image description here

enter image description here

cevap

1

Benzer bir sorun, nihayet istenen sonuçları verecek bir kesmek bulmayı başardım. Ancak bunun için BrowseSupportFragment kaynağını veya Sofa kaynağını almanız ve aşağıdaki kod satırını değiştirmeniz gerekebilir. Onun bir hack olduğunu biliyorum, ama istenen çıktı.

BrowseFragment için

: Notice the mRowsFragment.setExpand(true)

private void showHeaders(boolean show) { 
     if (DEBUG) Log.v(TAG, "showHeaders " + show); 
     mHeadersFragment.setHeadersEnabled(show); 
     setHeadersOnScreen(show); 
     setRowsAlignedLeft(!show); 
     if (mRowsFragment != null) { 
      mRowsFragment.setExpand(true); 
     } else if (mCurrentFragment != null && mCurrentFragment instanceof RowsFragment) { 
      ((RowsFragment) mCurrentFragment).setExpand(true); 
     } 
    } 

ve aynı Mayur Kaul önce bahsedildiği gibi

private void showHeaders(boolean show) { 
     if (DEBUG) Log.v(TAG, "showHeaders " + show); 
     mHeadersSupportFragment.setHeadersEnabled(show); 
     setHeadersOnScreen(show); 
     setRowsAlignedLeft(!show); 
     if (mRowsSupportFragment != null) { 
      mRowsSupportFragment.setExpand(true); 
     } else if (mCurrentFragment != null && mCurrentFragment instanceof RowsSupportFragment) { 
      ((RowsSupportFragment) mCurrentFragment).setExpand(true); 
     } 
    } 
+0

? lütfen açıklayabilirim çünkü benim TV uygulamasında benzer bir şey yapmak istiyorum. –

+0

Bu benim durumumda çalışmıyor .. Kodunuzu Github'a koyabilir misiniz? –

2

u sadece

mRowsFragment.setExpand(true) 

Ama aramak gerekir yanı BrowseSupportFragment için de geçerli Bu durum her zaman onAttachedToWindow(...) yönteminin ne zaman olacağını çağrılabilir (bkz. android.support.v17.leanback.app.RowsFragment - ItemBridgeAdapter.AdapterListener mBridgeAdapterListener), başlık başlıklarınız zaten gizlenmiş olacaktır.

Yani son çözüm, cadı sadece basitçe aşağıda gibi RowsFragment uygulanmasında setExpand() yöntemini geçersiz oluyor benim için çalıştı:

bu sorunu çözmüş nasıl
@Override 
    public void setExpand(boolean expand) { 
     super.setExpand(true); 
    } 
İlgili konular