2016-02-02 11 views
5

Sto provando a creare un'applicazione Android TV simile all'applicazione Youtube. e sto usando la libreria Sofa per farlo. Ora il problema si presenta quando sto cercando di mostrare le intestazioni per i singoli articoli nel RowsFragment anche quando lo RowsFragment non ha un focus. seguito riporta il codice per caricare l'insieme di dati in browseFragmentcome mostrare sempre le intestazioni in 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"); 
    } 

La richiesto e l'implementazione corrente è descritta come nelle schermate di seguito:

enter image description here

enter image description here

risposta

1

Per coloro che si trovano ad affrontare un problema simile, finalmente sono riuscito a trovare un trucco che darà i risultati desiderati. Ma per questo potrebbe essere necessario ottenere la fonte di BrowseSupportFragment o in Sofa e modificare la seguente riga di codice. So che è un po 'hacker, ma ottiene l'output desiderato.

Per BrowseFragment: 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); 
     } 
    } 

e lo stesso vale per il BrowseSupportFragment così

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

come avete risolto questo problema? per favore puoi spiegarti perché voglio fare qualcosa di simile nella mia app TV. –

+0

Nel mio caso non funziona. Puoi inserire il tuo codice su Github? –

2

Come Mayur Kaul già accennato, u solo bisogno di chiamare

mRowsFragment.setExpand(true) 

Ma in questo caso ogni volta che lo sarebbe il metodo onAttachedToWindow(...) essere chiamato (vedi android.support.v17.leanback.app.RowsFragment - ItemBridgeAdapter.AdapterListener mBridgeAdapterListener), i titoli di intestazione sarebbero comunque nascosti.

soluzione in modo definitivo, strega ha lavorato per me è semplicemente l'override setExpand() metodo nella realizzazione RowsFragment come di seguito:

@Override 
    public void setExpand(boolean expand) { 
     super.setExpand(true); 
    } 
Problemi correlati