无法在多个选项卡中使用回收器视图

Unable to use recycler views in multiple tabs

我有三个 tabs.For 测试目的,我将相同的片段设置为所有三个 tabs.Fragment 有回收站视图。我只能在第一个片段中查看回收站视图。

Activity代码:

        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);

片段代码:

@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);
    }

适配器代码:

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

启动 activity 时,RecyclerView 仅在第一个选项卡中可见。如果我滑动标签,那么它只会在第二个标签中可见。

我在调试时观察到以下错误:

No adapter attached; skipping layout

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

这是非常错误的。将您的逻辑从 onActivityCreated() 移动到 onViewCreated(),并获得片段的 自己的 RecyclerView。每个片段都应该在 onCreateView() 中创建自己的 RecyclerView,这将是 ViewPager.

页面的内容