web-dev-qa-db-fra.com

"RecyclerView: aucun adaptateur connecté; disposition ignorée" pour la vue d'ensemble du recyclage dans un fragment

Je reçois cette erreur, mais je ne sais pas ce qui la cause ... peut-être quelque chose à voir avec le fait que cela est initialisé dans un fragment et non dans l'activité elle-même. Edit: inclus le code StatsAdapter

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

Déplacez votre ligne setLayoutManager avant setAdapter

21
Trey Cai

Créez l'adaptateur et les objets associés "sans affichage" dans onCreate. Utilisez ensuite votre adaptateur pour le RecyclerView.

Nettoyez également votre code en lançant les objets dans un ordre clair en fonction de leur utilisation et du cycle de vie 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;
    }
}
10
Jared Burrows

Une façon de résoudre ce problème consiste à attacher un adaptateur vide au RecyclerView

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