9

Ich bekomme diesen Fehler, aber ich weiß nicht, was es verursacht ... vielleicht etwas mit der Tatsache zu tun, dass dies in einem initialisiert wird Fragment und nicht in der Aktivität selbst. Edit: inbegriffen StatsAdapter Code"RecyclerView: Kein Adapter angeschlossen; Layout überspringen" für RecyclerView in Fragment

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

Erstellen Sie den Adapter und die „Nicht-Ansicht“ verwandte Objekte befestigen in 'onCreate'. Verwenden Sie dann Ihren 'Adapter' für die' Recyclerview'. –

+0

@Jared Burrows, das ändert das Ergebnis trotz der Richtigkeit nicht. – McGuile

+0

@McGuile Veröffentlichen Sie Ihre Antwort oder korrigieren Sie meine. –

Antwort

9

Erstellen Sie den Adapter und die "Nicht-view" verwandte Objekte in onCreate. Dann verwenden Sie Ihren Adapter für die RecyclerView.

Bereinigen Sie auch Ihren Code, indem Sie die Objekte in einer eindeutigen Reihenfolge basierend auf ihrer Verwendung und dem Activity Lebenszyklus initiieren.

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

tut mRecyclerView.setAdapter (mAdapter); geh nach Teil 3? Versuchte das und immer noch den gleichen Fehler – hshangguan

+0

Haben Sie alle meine Änderungen und Kommentare gesehen? Kopieren Sie einfach den Code und fügen Sie ihn ein. –

+0

@Jared können Sie weitere Erklärungen zu "Create" non-view "related objects in onCreate" hinzufügen. Warum ist es anders, als es in OnCreateView hinzuzufügen? – Nativ

18

Bewegen Sie setLayoutManager Linie vor setAdapter

4

Eine Möglichkeit, dieses Problem zu beheben, wird eine leere Adapter an den RecyclerView

void initializeRecyclerView() { 

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

Was passiert, wenn dieser Fehler in ** FirebaseRecyclerAdapter ** auftritt? –

Verwandte Themen