wake-up-neo.com

"RecyclerView: Kein Adapter angeschlossen; Überspringen des Layouts" für die fragmentierte Recyclingübersicht

Ich erhalte diesen Fehler, weiß aber nicht, woran es liegt ... Vielleicht liegt es daran, dass dies in einem Fragment und nicht in der Aktivität selbst initialisiert wird. Bearbeiten: enthaltener StatsAdapter-Code

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;
    }
}
10
hshangguan

Verschieben Sie Ihre setLayoutManager -Zeile vor setAdapter

21
Trey Cai

Erstellen Sie in onCreate den Adapter und die mit "non view" verbundenen Objekte. Verwenden Sie dann Ihren Adapter für das RecyclerView.

Bereinigen Sie außerdem Ihren Code, indem Sie die Objekte in einer eindeutigen Reihenfolge einleiten, die auf ihrer Verwendung und dem Activity -Lebenszyklus basiert.

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;
    }
}
10
Jared Burrows

Eine Möglichkeit, dieses Problem zu beheben, besteht darin, einen leeren Adapter an den RecyclerView anzuschließen

void initializeRecyclerView() {

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