【问题标题】:How do I go to the next tab onClick in a Recyclerview?如何在 Recyclerview 中转到下一个选项卡 onClick?
【发布时间】:2019-12-11 08:28:09
【问题描述】:
  • 所以基本上我在ViewPagerTabLayout 中有两个标签,用于在标签视图中存储两个片段。

  • 问题是,我在 recycler view 中使用卡片视图,并且卡片视图有一个赞按钮。基本上,当用户单击按钮时,它应该出现在下一个选项卡上 - 但它没有。只有当用户离开整个页面并返回到它并选择该选项卡时,才会显示选定的卡片视图。 我检查了我的数据库,它正在做它应该做的事情,但它是 recycler view 没有更新。

这是我喜欢卡片视图中内容的代码

    public class HomeFragment extends Fragment {

    private static final String TAG = "MSG: ";
    private Toolbar toolbar;
    public TabLayout tabLayout;
    private ViewPager viewPager;
    private Context context;
    public View root;


    public int[] tabsUnselected = {
            R.drawable.unselected_notification,
            R.drawable.unselected_chat,
            R.drawable.unselected_issue,
            R.drawable.unselected_verified
    };

    public int[] tabSelected = {
            R.drawable.selected_notification,
            R.drawable.selected_chat,
            R.drawable.selected_issue,
            R.drawable.selected_verified
    };



    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {

        root = inflater.inflate(R.layout.fragment_home, container, false);
        context = container.getContext();
        setupTabs(root);
        tabLayout.getTabAt(0).setIcon(tabSelected[0]);

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                int position = tab.getPosition();

                switch (position) {
                    case 0:
                        tabLayout.getTabAt(0).setIcon(tabSelected[0]);
                        break;
                    case 1:
                        tabLayout.getTabAt(1).setIcon(tabSelected[1]);
                        break;
                    case 2:
                        tabLayout.getTabAt(2).setIcon(tabSelected[2]);
                        break;
                    case 3:
                        tabLayout.getTabAt(3).setIcon(tabSelected[3]);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                int position = tab.getPosition();
                switch (position) {
                    case 0:
                        tabLayout.getTabAt(0).setIcon(tabsUnselected[0]);
                        break;
                    case 1:
                        tabLayout.getTabAt(1).setIcon(tabsUnselected[1]);
                        break;
                    case 2:
                        tabLayout.getTabAt(2).setIcon(tabsUnselected[2]);
                        break;
                    case 3:
                        tabLayout.getTabAt(3).setIcon(tabsUnselected[3]);
                        break;
                }
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        return root;
    }

    private void setupTabIcons() {
        tabLayout.getTabAt(0).setIcon(tabsUnselected[0]);
        tabLayout.getTabAt(1).setIcon(tabsUnselected[1]);
        tabLayout.getTabAt(2).setIcon(tabsUnselected[2]);
        tabLayout.getTabAt(3).setIcon(tabsUnselected[3]);
    }

    public void setupTabs(View view) {
        toolbar = view.findViewById(R.id.toolbar);
        viewPager = view.findViewById(R.id.viewpager);
        tabLayout = view.findViewById(R.id.tabs);
        ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
        ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        tabLayout.setupWithViewPager(viewPager);
        setupViewPager(viewPager);
        setupTabIcons();

    }

    public void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
        adapter.addFragment(new Notification(), "Notification");
        adapter.addFragment(new Conversation(), "Conversation");
        adapter.addFragment(new Issues(), "Issues");
        adapter.addFragment(new Pinned(), "Pinned");
        viewPager.setAdapter(adapter);
    }

    private void experiment() {

    }

  • 因此,当第一次打开选项卡时工作正常并且填充了回收站视图,但是当视图是单击时,我想转到另一个选项卡, 喜欢下一个标签。

我的寻呼机适配器:

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

    public List<NotificationFeed> notificationFeedList;
    public Context context;


    public NotificationFeedAdapter(List<NotificationFeed> notificationFeedList) {
        this.notificationFeedList = notificationFeedList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.notification_single_item, parent, false);
        context = parent.getContext();

        return new ViewHolder(view);

    }



    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        final String list = notificationFeedList.get(position).NotificationFeedID;
        String body = notificationFeedList.get(position).getBody();
        String userHandle = notificationFeedList.get(position).getUserHandle();
        holder.descView.setText(body);
        holder.userName.setText(userHandle);
        holder.id = list;
    }
    @Override
    public int getItemCount() {
        return notificationFeedList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private View mView;
        private TextView descView;
        private TextView userName;
        private String id;
        private String TAG = "MSG: ";
        private TextView mMore;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mView = itemView;
            itemView.setOnClickListener(this);
            descView = mView.findViewById(R.id.body);
            userName = mView.findViewById(R.id.user);
            mMore = mView.findViewById(R.id.more);
        }

        @Override
        public void onClick(View v) {
           // Navigate to tab
        }
    }
    }

我将在onclick 事件中添加什么以使其进入下一个选项卡。

【问题讨论】:

  • 您不会看到任何变化,因为在 viewpager 中,2 个片段同时启动。由于另一个片段已经处于 onResume 状态,因此在您重新启动片段之前不会显示更改。您可以使用可变的实时数据来观察下一个片段的变化。
  • 我该如何解决这个问题

标签: android android-recyclerview android-cardview


【解决方案1】:

创建listener,包含带有所需选项卡的参数以进行导航,将其传递给适配器,从Adapter 传递给ViewHolder,并在HomeFragment 中收听您拥有ViewPager 的点击,然后导航到您想要的任何选项卡使用

viewPager.setCurrentItem(pageNo)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多