【发布时间】:2017-06-23 23:27:57
【问题描述】:
我有一个带有 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 中,我有一个用于不同视图类型的开关盒: 小米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();
}
我该如何解决这个问题?
【问题讨论】:
-
仅根据您提供的信息来帮助您几乎是不可能的。至少显示 RecyclerView 适配器的代码,包括点击监听器。
-
嗨,Leo,我编辑了答案
标签: android tabs android-recyclerview adapter android-tablayout