2015-03-05 21 views
6

Sto tentando di visualizzare il recyclerview nidificato ma gli elementi secondari non vengono visualizzati. Desidero visualizzare elementi diversi in tutte le viste secondarie. Non ricevo un errore, ma la vista non è aggiornata.recyclerview annidato da android

Ecco il mio codice può aiutare a qualcuno.

Grazie

public class MainActivity extends ActionBarActivity { 

    RecyclerView recyclerView; 
    RootAdapter adapter; 

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

     adapter = new RootAdapter(this); 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerRoot); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     recyclerView.setAdapter(adapter); 

    } 

private class RootAdapter extends RecyclerView.Adapter<RootAdapter.RootViewHolder> { 

     private final LayoutInflater inflater; 
     String[] _items = new String[]{"ITEM 1", "ITEM 2", "ITEM 3", "ITEM 4"}; 
     public RootAdapter(Context context) 
     { 
      inflater = LayoutInflater.from(context); 
     } 

     @Override 
     public RootViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
      View view = inflater.inflate(R.layout.root_row, viewGroup, false); 
      RootViewHolder rvi = new RootViewHolder(view); 
      return rvi; 
     } 

     @Override 
     public void onBindViewHolder(RootViewHolder rootViewHolder, int i) { 
      rootViewHolder.txtRootLine.setText(_items[i]); 
      rootViewHolder.recyclerViewChild.setLayoutManager(new LinearLayoutManager(inflater.getContext())); 
      rootViewHolder.recyclerViewChild.setAdapter(new ChildAdapter(inflater)); 
     } 

     @Override 
     public int getItemCount() { 
      return _items.length; 
     } 

     class RootViewHolder extends RecyclerView.ViewHolder { 
      TextView txtRootLine; 
      RecyclerView recyclerViewChild; 
      public RootViewHolder(View itemView) { 
       super(itemView); 
       txtRootLine = (TextView) itemView.findViewById(R.id.txtRootLine); 
       recyclerViewChild = (RecyclerView) itemView.findViewById(R.id.recyclerChild); 
      } 
     } 
    } 


private class ChildAdapter extends RecyclerView.Adapter<ChildAdapter.ChildViewHolder> { 
     private LayoutInflater _inflater; 
     String[] _childItems = new String[]{"child 1", "child 2", "child 2"}; 
     public ChildAdapter(LayoutInflater inflater) { 
      _inflater = inflater; 
     } 

     @Override 
     public ChildViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
      View view = _inflater.inflate(R.layout.child_row, viewGroup, false); 
      ChildViewHolder rvi = new ChildViewHolder(view); 
      return rvi; 
     } 

     @Override 
     public void onBindViewHolder(ChildViewHolder childViewHolder, int i) { 
      childViewHolder.txtChildLine.setText(_childItems[i]); 
     } 

     @Override 
     public int getItemCount() { 
      return _childItems.length; 
     } 

     public class ChildViewHolder extends RecyclerView.ViewHolder { 
      TextView txtChildLine; 
      public ChildViewHolder(View itemView) { 
       super(itemView); 
       txtChildLine = (TextView) itemView.findViewById(R.id.txtChildLine); 
      } 
     } 
    } 


activity_main.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="main text"/> 

    <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/recyclerRoot" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </android.support.v7.widget.RecyclerView> 

</LinearLayout> 

root_row.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/txtRootLine" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/recyclerChild" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </android.support.v7.widget.RecyclerView> 

</LinearLayout> 


child_row.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/txtChildLine" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 
+0

hey, hai trovato qualche soluzione per quello ?? –

+3

possibile duplicato di [Come avere un ListView/RecyclerView all'interno di un parente RecyclerView ?. Ho un elenco dei genitori, che contiene alcuni elenchi di figli in ogni posizione] (http://stackoverflow.com/questions/32011995/how-to-have-a-listview-recyclerview-inside-a-parent-recyclerview-i- have-a-pare) – Mogsdad

+0

Non dovresti creare un nuovo adattatore in onBindView(), dovresti farlo una volta. Si prega di guardare [questa libreria] (https://github.com/vivchar/RendererRecyclerViewAdapter) Penso che ti aiuterà – Vitaly

risposta

-1

RecyclerView non supporta wrap_content.Set qualche valore in vista riciclatore nidificato come 200dp e la vostra voce presenta volontà. Altre discussioni disponibili here

+0

Che non lo fa risolvere il problema. –

+0

Questo è cambiato con l'ultima versione, ora è possibile utilizzare wrap_content per RecyclerView. Modifica: Source -> http://android-developers.blogspot.se/2016/02/android-support-library-232.html – zoltish

2

Il gestore di layout esistente non supporta ancora il contenuto di avvolgimento. Provalo assegnando un'altezza fissa al tuo recyclerChild e apparirà la vista.

Come soluzione a questo problema è possibile creare una nuova LayoutManager che si estende quello già esistente o sovrascrivere il metodo onMeasure su misura per i contenuti involucro.

0

Per Android libreria di supporto 23.2 di una libreria di supporto versione 23.2.0. Quindi tutto il WRAP_CONTENT dovrebbe funzionare correttamente.

Si prega di aggiornare la versione di una libreria nel file gradle.

compile 'com.android.support:recyclerview-v7:23.2.0' 
+0

Ancora le sue righe non sono visibili –

Problemi correlati