9

我得到這個錯誤,但我不知道是什麼導致它...也許是與事實,這是在初始化的事實片段,而不是在活動本身。編輯:包括StatsAdapter代碼「RecyclerView:No Adaptor attached; skip layout」for 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

創建適配器和「非視圖」相關的對象在'onCreate'中。然後使用''adaptler'作爲'recyclerview'。 –

+0

@Jared Burrows,即使它是正確的,也不會改變結果。 – McGuile

+0

@McGuile發佈您的答案或正確的答案。 –

回答

9

onCreate中創建適配器和「非視圖」相關對象。然後使用您的適配器爲RecyclerView

此外,通過基於其使用和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

does mRecyclerView.setAdapter(mAdapter);在第3部分之後?試過,仍然得到相同的錯誤 – hshangguan

+0

你看到我的所有更改和評論?只需複製並粘貼代碼即可。 –

+0

@Jared您可以添加更多解釋到「在onCreate中創建」非視圖「相關對象」。爲什麼它不同,然後將其添加到OnCreateView? – Nativ

18

移動你setLayoutManager前行setAdapter

4

一種方法來解決這個問題是一個空的適配器連接到RecyclerView

void initializeRecyclerView() { 

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

如果在FirebaseRecyclerAdapter **中發生此錯誤,該怎麼辦? –