回收站视图未在 android studio 中显示一张卡片视图

Posted

技术标签:

【中文标题】回收站视图未在 android studio 中显示一张卡片视图【英文标题】:Recycler view not showing one card view in android studio 【发布时间】:2020-07-06 13:18:03 【问题描述】:

我正在尝试通过回收站视图在片段的卡片视图中显示数组列表。数组列表包含要在片段的五个卡片视图上显示的五个值。但它只显示四个。片段的代码如下:

public class AddMemberFragment extends Fragment 

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private View view ;
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
String userId;
String n_team ;
private ArrayList<Friend> friends;


public AddMemberFragment() 


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) 
    view = inflater.inflate(R.layout.addnewfriend_fragment, container, false);
    return view;


@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) 
    super.onActivityCreated(savedInstanceState);

    userId = firebaseUser.getUid();
    ManageTeamTabbedActivity activity = (ManageTeamTabbedActivity) getActivity();
    n_team = activity.getMyData();
    mRecyclerView = (RecyclerView) getView().findViewById(R.id.addNewFriend);
    mLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mLayoutManager);


    mRootRef.child("users").addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 
            ArrayList<Friend> friendArrayList = new ArrayList<>();
            for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) 
                Log.d("demo", "USERID " + FirebaseAuth.getInstance().getCurrentUser().getUid());
                Friend friend = new Friend();
                friend.setId(userSnapshot.getKey());
                friend.setFriendName((String) userSnapshot.child("profiles").child("fname").getValue());  //Implement it
                friendArrayList.add(friend);
            
            friends = friendArrayList;
            mAdapter = new AddFriendAdapter(getActivity(), friends, n_team);
            mRecyclerView.setAdapter(mAdapter);


        

        @Override
        public void onCancelled(DatabaseError databaseError) 

        
    );

适配器代码如下。

public class AddFriendAdapter extends RecyclerView.Adapter<AddFriendAdapter.RecyclerViewHolder>

private ArrayList<Friend> mData;
private Context mContext;
private FirebaseAuth auth;
private String u_team ;

public AddFriendAdapter(Context mContext, ArrayList<Friend> friendList , String u_team) 
    this.mData = friendList;
    this.mContext = mContext;
    this.u_team= u_team;


@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.addnewfriend_layout, parent, false);
    AddFriendAdapter.RecyclerViewHolder viewHolder = new AddFriendAdapter.RecyclerViewHolder(view);
    return viewHolder;


@Override
public void onBindViewHolder(RecyclerViewHolder holder, final int position) 
    final Friend frnd =(Friend) mData.get(position);

    holder.friendName.setText(frnd.getFriendName());
    holder.addFriend.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            frnd.setStatus("sent");
            final DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
            final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
            final String UID = firebaseUser.getUid();
            mRootRef.child("users").addValueEventListener(new ValueEventListener() 
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) 
                    mRootRef.child("users").child(UID).child("Your Teams").child("requests").child(frnd.getId()).setValue(frnd);
                    Friend temp = new Friend();
                    temp.setId(firebaseUser.getUid());
                    temp.setFriendName(firebaseUser.getDisplayName());
                    temp.setStatus("received");
                    mRootRef.child("users").child(frnd.getId()).child("Your Teams ").child("requests").child(firebaseUser.getUid()).setValue(temp);
                    mData.remove(frnd);
                    notifyDataSetChanged();
                

                @Override

                public void onCancelled(DatabaseError databaseError) 

                
            );
        
    );


@Override
public int getItemCount() 
    return mData.size();


public class RecyclerViewHolder extends RecyclerView.ViewHolder 
    TextView friendName;
    ImageButton addFriend;

    public RecyclerViewHolder(View itemView) 
        super(itemView);
        friendName = (TextView)itemView.findViewById(R.id.textViewFriendName);
        addFriend = (ImageButton) itemView.findViewById(R.id.imagebuttonFriendAdd);
    

附上模拟器截图,其中ADD NEW MEMBER片段中有四个卡片视图。

我自己调试累了,发现数组列表中的条目如预期的那样是五个。

还附上数据库图片供参考。如图所示,它也有五个ID要显示,但recycler视图显示四个。

【问题讨论】:

当您打印出 ArrayList 时,android 会显示什么? 我通过 onBindViewHolder 中的 Log.d() 打印它并获得了正确数量的值。我还添加了第 6 条记录。并且这六个值在数组列表中显示得非常正确。使用卡片视图打印此数组列表时可能出现问题。 这行mData.remove(frnd); 不是导致你出现这种行为吗? 我评论说问题仍然没有解决。所以我不认为它是否会导致这种行为。 【参考方案1】:

由于此限制,我将我的评论放在答案字段中:“您必须有 50 名声望才能发表评论”。

Log.d() 放入onBindViewHolder 以监控这些值怎么样? 使用“断点”分析 onActivityCreated() 处的数据并不是一个好主意,因为 UI 可能尚未完全填充。另外,您不妨添加第 6 条记录,它显示 4 条还是 5 条记录?通过这种方式,您可以确定是最后的记录问题还是其他问题。

【讨论】:

我通过 onBindViewHolder 中的 Log.d() 打印它并获得了正确数量的值。我还添加了第 6 条记录。并且这六个值在数组列表中显示得非常正确。使用卡片视图打印此数组列表时可能出现问题。

以上是关于回收站视图未在 android studio 中显示一张卡片视图的主要内容,如果未能解决你的问题,请参考以下文章

Recycler视图在android studio中未显示一张卡片视图

我的回收站视图第二次未在片段中显示

如何使用交错布局(或任何其他建议)在 android studio 的视图中制作图像集合

如何从android studio中的recycler视图将数据添加到SQLite数据库中

如何在android studio中显示按地址排序的联系人姓名和号码

如何将值从活动传递到 Android Studio 中的类?