Android 从另一个选项卡导航时,Recyclerview inside viewpager会自动复制项目
所以我有这样的问题 我正在使用带有表格布局的recyclerview inside viewpager。当“活动”启动时,它工作正常,但当我导航到最后一个选项卡并再次返回到其中的recyclerview选项卡时,该项目正在复制 她是我的朋友:Android 从另一个选项卡导航时,Recyclerview inside viewpager会自动复制项目,android,android-recyclerview,Android,Android Recyclerview,所以我有这样的问题 我正在使用带有表格布局的recyclerview inside viewpager。当“活动”启动时,它工作正常,但当我导航到最后一个选项卡并再次返回到其中的recyclerview选项卡时,该项目正在复制 她是我的朋友: public class TabAdapter extends FragmentPagerAdapter { private Context mContext; public TabAdapter(Context context, FragmentMa
public class TabAdapter extends FragmentPagerAdapter {
private Context mContext;
public TabAdapter(Context context, FragmentManager fragmentManager) {
super(fragmentManager);
mContext = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new CameraTabFragment();
case 1:
return new ChatTabFragment();
case 2:
return new StatusTabFragment();
default:
return new CallsTabFragment();
}
}
@Override
public int getCount() {
return 4;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) {
return null;
} else if (position == 1) {
return "Chats";
} else if (position == 2) {
return "Status";
} else {
return "Calls";
}
}}
我与recyclerview的片段:
public class ChatTabFragment extends Fragment {
private RecyclerView mRecyclerView;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mConversationReference;
private DatabaseReference mChatReference;
private DatabaseReference mUserReference;
private FirebaseAuth mAuth;
private FirebaseUser mFirebaseUser;
private ChatListAdapter mAdapter;
private String personId;
private String key;
private List<User> userList = new ArrayList<>();
private List<Chat> chatList = new ArrayList<>();
private List<Conversation> conversationList = new ArrayList<>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_chat_tab, container, false);
mRecyclerView = rootView.findViewById(R.id.recyvlerview_chat_tab);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mFirebaseDatabase = FirebaseDatabase.getInstance();
mAuth = FirebaseAuth.getInstance();
mFirebaseUser = mAuth.getCurrentUser();
mChatReference = mFirebaseDatabase.getReference().child("chats");
mConversationReference = mFirebaseDatabase.getReference().child("conversation").child(mFirebaseUser.getUid());
mUserReference = mFirebaseDatabase.getReference().child("users");
mConversationReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Conversation conversation = snapshot.getValue(Conversation.class);
conversationList.add(conversation);
key = snapshot.getKey();
personId = snapshot.child("chatWithId").getValue(String.class);
Query query = mUserReference.orderByKey().equalTo(personId);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
userList.add(user);
}
mAdapter = new ChatListAdapter(getActivity(), userList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return rootView;
}
公共类ChatTabFragment扩展了片段{
私人回收视图mRecyclerView;
私有FirebaseDatabase mFirebaseDatabase;
私有数据库引用mConversationReference;
私有数据库引用mChatReference;
私有数据库参考mUserReference;
私人消防队;
私有FirebaseUser mFirebaseUser;
私人聊天室;
私人字符串人形;
私钥;
private List userList=new ArrayList();
私有列表chatList=newarraylist();
private List conversationList=new ArrayList();
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u chat\u选项卡,容器,false);
mRecyclerView=rootView.findviewbyd(R.id.recyvlerview\u chat\u选项卡);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
mFirebaseDatabase=FirebaseDatabase.getInstance();
mAuth=FirebaseAuth.getInstance();
mFirebaseUser=mAuth.getCurrentUser();
mChatReference=mFirebaseDatabase.getReference().child(“聊天”);
mConversationReference=mFirebaseDatabase.getReference().child(“对话”).child(mFirebaseUser.getUid());
mUserReference=mFirebaseDatabase.getReference().child(“用户”);
mConversationReference.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
Conversation=snapshot.getValue(Conversation.class);
会话列表。添加(会话);
key=snapshot.getKey();
personId=snapshot.child(“chatWithId”).getValue(String.class);
Query Query=mUserReference.orderByKey().equalTo(personId);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
User=snapshot.getValue(User.class);
添加(用户);
}
mAdapter=newchatlistadapter(getActivity(),userList);
mRecyclerView.setAdapter(mAdapter);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
返回rootView;
}
}
这是我的recyclerview适配器:
public class ChatListAdapter extends RecyclerView.Adapter<ChatListAdapter.MyViewHolder> {
private FirebaseAuth mAuth;
private FirebaseUser mFirebaseUser;
private List<Conversation> conversationList;
private List<User> userList;
private Context mContext;
public ChatListAdapter(Context context, List<User> users) {
this.mContext = context;
this.userList = users;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chats, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
User user = userList.get(position);
holder.username.setText(user.getUsername());
Glide.with(mContext)
.load(user.getPhotoUrl())
.into(holder.avatar);
holder.layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
User user1 = userList.get(position);
Intent intent = new Intent(mContext, ChatRoomActivity.class);
intent.putExtra("userUid", user1.getUid());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return userList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView username;
private TextView message;
private CircleImageView avatar;
private RelativeLayout layout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
username = itemView.findViewById(R.id.tv_username);
message = itemView.findViewById(R.id.tv_message);
avatar = itemView.findViewById(R.id.avatar_user);
layout = itemView.findViewById(R.id.layout_user_chat);
}
}}
公共类ChatListAdapter扩展了RecyclerView.Adapter{
私人消防队;
私有FirebaseUser mFirebaseUser;
私有列表会话列表;
私有列表用户列表;
私有上下文;
公共ChatListAdapter(上下文,列表用户){
this.mContext=上下文;
this.userList=用户;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.item\u chats,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull final MyViewHolder holder,final int position){
User=userList.get(位置);
holder.username.setText(user.getUsername());
使用(mContext)滑动
.load(user.getPhotoUrl())
.into(holder.avatar);
holder.layout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
User user1=userList.get(位置);
Intent Intent=新的Intent(mContext、ChatRoomActivity.class);
intent.putExtra(“userUid”,user1.getUid());
intent.setFlags(intent.FLAG\u活动\u清除\u任务);
mContext.startActivity(意图);
}
});
}
@凌驾
public int getItemCount(){
返回userList.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图用户名;
私有文本视图消息;
私人CircleImageView头像;
私人住宅布局;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
username=itemView.findviewbyd(R.id.tv\u用户名);
message=itemView.findviewbyd(R.id.tv_消息);
avatar=itemView.findviewbyd(R.id.avatar\u用户);
layout=itemView.findviewbyd(R.id.layout\u user\u chat);
}
}}
我怎样才能解决这个问题?谢谢。在向列表中添加数据之前,请清除用户列表
userlist.clear() 问题的解决方案是在
ChatTabFragment
的onCreateView方法中添加userList.clear()
前
@Nullable
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u chat\u选项卡,容器,false);
mRecyclerView=rootView.findviewbyd(R.id.recyvlerview\u chat\u选项卡);
userList.clear();
//其他现有代码…
请添加viewpager.setOffscreenPageLimit(4);
,您需要根据所使用的选项卡/片段数量设置限制