9

Ricevo questo errore ma non so cosa lo stia causando ... forse qualcosa a che fare con il fatto che questo viene inizializzato in un frammento e non nell'attività stessa. Edit: incluso codice StatsAdapter"RecyclerView: No Adapter attached; skipping layout" per recyclerview in frammento

public class StatsFragment extends Fragment { 

    private RecyclerView mRecyclerView; 
    private LinearLayoutManager mLinearLayoutManager; 
    private RecyclerView.Adapter mAdapter; 
    private String[] myDataset = new String[]{"hello", "world", "yolo"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_stats, parent, false); 
     mRecyclerView = (RecyclerView) v.findViewById(R.id.cardList); 
     mRecyclerView.setHasFixedSize(true); 
     mAdapter = new StatsAdapter(myDataset); 
     mRecyclerView.setAdapter(mAdapter); 
     mLinearLayoutManager = new LinearLayoutManager(getActivity()); 
     mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     mRecyclerView.setLayoutManager(mLinearLayoutManager); 
     return v; 
    } 
} 



public class StatsAdapter extends RecyclerView.Adapter<StatsAdapter.ViewHolder> { 
    private String[] mDataset; 

    public static class ViewHolder extends RecyclerView.ViewHolder { 
     public TextView mTextView; 
     public ViewHolder(View v) { 
      super(v); 
      mTextView = (TextView) v.findViewById(R.id.title); 
     } 
    } 

    public StatsAdapter(String[] myDataset) { 
     mDataset = myDataset; 
    } 

    @Override 
    public StatsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_stats, parent, false); 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.mTextView.setText(mDataset[position]); 
    } 

    @Override 
    public int getItemCount() { 
     return mDataset.length; 
    } 
} 
+0

Creare l'adattatore e il "non-view" oggetti correlati in 'onCreate'. Quindi usa il tuo 'adattatore' per' recyclerview'. –

+0

@Jared Burrows, che non cambia il risultato nonostante sia corretto. – McGuile

+0

@McGuile Posta la tua risposta o correggi il mio. –

risposta

9

Creare l'adattatore e il "non-view" oggetti correlati in onCreate. Quindi utilizzare l'adattatore per lo RecyclerView.

Inoltre, pulire il codice avviando gli oggetti in un ordine chiaro in base al loro utilizzo e al ciclo di vita Activity.

public class StatsFragment extends Fragment { 

    private RecyclerView mRecyclerView; 
    private LinearLayoutManager mLinearLayoutManager; 
    private StatsAdapter mAdapter; // was RecyclerView.Adapter mAdapter; 
    private String[] myDataset = new String[]{"hello", "world", "yolo"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // 1. 
     mAdapter = new StatsAdapter(myDataset); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_stats, parent, false); 

     // 2. 
     mLinearLayoutManager = new LinearLayoutManager(getActivity()); 
     mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 

     // 3. 
     mRecyclerView = (RecyclerView) v.findViewById(R.id.cardList); 
     mRecyclerView.setHasFixedSize(true); 
     mRecyclerView.setLayoutManager(mLinearLayoutManager); 
     mRecyclerView.setAdapter(mAdapter); 

     return v; 
    } 
} 
+0

fa mRecyclerView.setAdapter (mAdapter); andare dopo la parte 3? Ho provato e ho riscontrato lo stesso errore – hshangguan

+0

Hai visto tutte le mie modifiche e commenti? Basta copiare e incollare il codice. –

+0

@Jared puoi aggiungere ulteriori spiegazioni per "Creare" oggetti correlati "non visibili" in onCreate ". perché è diverso quindi aggiungerlo in OnCreateView? – Nativ

18

Spostare la vostra linea setLayoutManager prima setAdapter

4

Un modo per risolvere questo problema è quello di collegare un adattatore vuota al RecyclerView

void initializeRecyclerView() { 

    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
    recyclerView.setAdapter(new SampleAdapter(getCurrentActivity())); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getCurrentActivity())); 
    recyclerView.setHasFixedSize(true); 
} 
+2

Cosa succede se questo errore si verifica in ** FirebaseRecyclerAdapter **? –