Tushar Kathuria
Tushar Kathuria

Reputation: 655

Unable to use recycler views in multiple tabs

I have three tabs.For testing purposes,I am setting the same fragment to all the three tabs.Fragment has a recycler view. I am able to view the recycler view only in first fragment.

Activity Code:

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new TrialsFragment(), getString(R.string.camps));
        adapter.addFragment(new TrialsFragment(), getString(R.string.trials));
        adapter.addFragment(new TrialsFragment(), getString(R.string.events));
        viewPager.setAdapter(adapter);

Fragment Code:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler);
        adapter = new TrialsRecyclerViewAdapter();
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setAdapter(adapter);
    }

Adapter code:

public class TrialsRecyclerViewAdapter extends RecyclerView.Adapter<TrialsRecyclerViewAdapter.ViewHolder> {

    String[] names = {"Sample Name","Sample Name","Sample Name","Sample Name","Sample Name"};
    String[] regNos ={"12345678","12345678","12345678","12345678","12345678"};

    @Override
    public TrialsRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        CardView cv = (CardView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.trial_card, parent, false);
        return new ViewHolder(cv);
    }

    @Override
    public void onBindViewHolder(TrialsRecyclerViewAdapter.ViewHolder holder, int position) {
        final CardView cardView = holder.cardView;

        TextView name = (TextView)cardView.findViewById(R.id.trial_name);
        TextView regNumber = (TextView)cardView.findViewById(R.id.trial_start_end);
        name.setText(names[position]);
        regNumber.setText(regNos[position]);

        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
    }

    @Override
    public int getItemCount() {
        return names.length;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder
    {
        private CardView cardView;
        public ViewHolder(CardView v)
        {
            super(v);
            cardView = v;
        }
    }
}

When the activity is started, RecyclerView is visible in first tab only. If I swipe the tabs, then it becomes visible in second tab only.

I observed the following error while debugging it:

No adapter attached; skipping layout

Upvotes: 2

Views: 2099

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006614

recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler);

This is very wrong. Move your logic from onActivityCreated() into onViewCreated(), and get the fragment's own RecyclerView. Each fragment should be creating its own RecyclerView in onCreateView(), which will be the contents of that page of the ViewPager.

Upvotes: 4

Related Questions