Android TabLayout 在notifyDataSetChanged() 之后更改选项卡

我有一个 tabLayout 和两个选项卡的活动。在每个选项卡中,我都有一个不同的片段,其中包含由 RecyclerView 适配器管理的元素列表(RecyclerView)。对于每个列表的每个元素,我有一个按钮可以从列表中删除该元素。

按钮的单击侦听器在适配器中设置。当我在第二个选项卡中并从列表中删除一个元素时,就会出现问题。在 notifyDatSetChanged() 之后,当前选项卡移动到第一个选项卡,我不希望那样!

这是我的代码:这是我的声明和 2 个不同片段中的适配器集:

碎片 1

 adapterList = new NotificationListAdapter(getContext(), R.layout.notification_list_element, teamsLeader, null, leadershipTeam); 
 list.setAdapter(adapterList);

碎片 2

 adapterList = new NotificationListAdapter(getContext(), R.layout.notification_list_element, teamsMember, membershipTeam, null); 
 list.setAdapter(adapterList);

这是我的适配器的构造函数:

public NotificationListAdapter(Context context, int resource, List<DBTeam> notifications, ArrayList<MembershipTeam> membershipTeam, ArrayList<TeamInfo> leadershipTeam) {
    this.notifications = notifications;
    this.context = context;
    this.resource = resource;
    this.membershipTeam = membershipTeam;
    this.leadershipTeam = leadershipTeam;
}

在我的 onBindViewHolder 中,我有一个用于不同视图类型的 switch case:Mi imageView removeItem 有一个调用方法的 clickListener。

@Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
            ImageView removeItem;
            LinearLayout getItemDetail;
            switch (holder.getItemViewType()) {
                case CHECKIN:
                    BaseHolder vh1 = (BaseHolder) holder;
                    configureViewHolder(vh1, position, context.getString(R.string.notification_checkin_title), R.drawable.notification_checkin);
                    removeItem = vh1.getRemoveItemImage();
                    getItemDetail = vh1.getDetail_layout();

                    removeItem.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            removeItem(context, notifications, position);
                        }
                    });

                    getItemDetail.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            getMemberItemDetail(context, notifications, position);
                        }
                    });

                    break;
AND SO ON

这是在单击侦听器中调用的 removeItem 方法:

private void removeItem(Context context, List<DBTeam> notifications, int position){
    MyRepository.getInstance(context).updateNotificationDBTeamSync(notifications.get(position).getNotificationId(), true);
    notifications.remove(position);
    this.notifyDataSetChanged();
}

我该如何解决这个问题?

我注意到我的问题后解决了我的问题:

MyRepository.getInstance(context).updateNotificationDBTeamSync(notifications.get(position).getNotificationId(), true);

private void removeItem(Context context, List<DBTeam> notifications, int position){
    MyRepository.getInstance(context).updateNotificationDBTeamSync(notifications.get(position).getNotificationId(), true);
    notifications.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, notifications.size());
}

正在调用从数据库中获取数据的活动方法(使用领域)。可能是因为我对领域的错误实施。在获取数据成功时,我正在为 tabLayout 创建 viewPager 适配器实例并设置它。所以问题是每次它创建 viewPager 适配器 e 的新实例时,默认情况下它会出现在第一个选项卡上。

我通过检查 viewPager 适配器的实例是否存在来解决了这个问题:

if(pagerAdapter == null){
                pagerAdapter = new NotificationPagerAdapter(getSupportFragmentManager(), getApplicationContext(), teamsLeader, teamsMember, membershipTeam, leadershipTeam);
                ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager_notification);
                viewPager.setAdapter(pagerAdapter);
                viewPager.addOnPageChangeListener((ViewPager.OnPageChangeListener) mContext);
                tabLayout = (TabLayout) findViewById(R.id.tab_layout_notification);
                tabLayout.setupWithViewPager(viewPager);
                changeTabsFont(0);
            }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

即使禁用了滑动,TabLayout上的触摸移动也会继续更改选项卡

如何使用Android中的代码使用TabLayout更改选定的选项卡文本颜色?

在Android设计支持TabLayout中更改选项卡文本的字体

TabLayout选项卡标题文本(小写)

使用Android设计库中的TabLayout的带有图标的选项卡

Android TabLayout(API 22)将片段添加到每个没有ViewPager的选项卡

获取TabLayout选项卡的textview

使用Android TabLayout时,单击选项卡不会切换当前选项卡

禁用TabLayout中的选项卡

Android设计支持库:TabLayout选项卡中的单行文本

由于选项菜单,如何取消选择Android中TabLayout的所有选项卡?

自定义的TabLayout:notifydatasetchanged将选项卡的自定义视图恢复为默认值

如何在Android中更改选项卡式活动的选项卡指示器的样式(默认为下划线)?

如何在Android上的TabLayout中以编程方式添加选项卡

如何在Android中更改选定的选项卡标题textSize

Android:如何更改选项卡布局中单个选项卡的宽度?

在Kotlin中更改Android TabLayout中选项卡的大小

如何在Android中更改选项卡指示器颜色

android TabLayout更改选定选项卡图标的颜色,显示暗白色

单击Android Pre-lollipop上的另一个选项卡后,Tablayout投影阴影消失

Android tabLayout上次选择的选项卡颜色未正确更新

在 viewpager 中更改选项卡时内容未更新 - Tablayout

如何在 Android 上的 TabLayout 中以编程方式创建选项卡

如何在 Android 上的 TabLayout 中为选择选项卡设置填充

Android TabLayout 在第二个选项卡上启动活动

Android:如何禁用选项卡选择上的默认弹出 TabLayout 动画

Android 活动片段侦听器无法单击 tablayout 中的中间选项卡

在 tablayout 中居中选项卡

从 TabLayout 添加和删除选项卡