提问者:小点点

使RecycerView适配器为不同的用户显示不同的视图


我创建了一个聊天应用程序,它使用firebasefirestore来存储聊天消息。

有一些特定的消息,我只想让其中一个用户接收。

目前我有两种视图类型:

>

  • 接收邮件的ViewType

    发送消息的ViewType

    假设有以下对话:

    user1到User2:嗨

    用户2到用户1:嘿

    user1到User2:单击按钮,自动发送消息<-----只向User2显示。

    现在在我的适配器中将发生的是,它将向两个用户显示此消息。

    我怎样才能确保只有user2会得到它呢?

    我的适配器是:

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        if (viewType == AppConstants.CHAT_SENT_KEY) {
            view = LayoutInflater.from( parent.getContext() ).inflate(
                    R.layout.item_chat_sent,
                    parent,
                    false );
            return new ChatViewHolder( view );
    
        } else if (viewType == AppConstants.CHAT_RECEIVED_KEY) {
            view = LayoutInflater.from( parent.getContext() ).inflate(
                    R.layout.item_chat_received,
                    parent,
                    false );
            return new ChatViewHolder( view );
    
        } else {
            view = LayoutInflater.from( parent.getContext() ).inflate( R.layout.item_loading, parent, false );
            return new LoadingViewHolder( view );
        }
    
    }
    
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
    
        if (viewHolder instanceof ChatViewHolder) {
            ((ChatViewHolder) viewHolder).bind( (chats.get( position )) );
        } else if (viewHolder instanceof LoadingViewHolder) {
            showLoadingView( (LoadingViewHolder) viewHolder, position );
        }
    
    }
    
    @Override
    public int getItemViewType(int position) {
        if (chats.get( position ).getSenderId().contentEquals( userId )) {
            if (position == 0 && chats.size() > 49 && snapSize > 49) {
                return AppConstants.CHAT_LOADING_KEY;
            } else {
                return AppConstants.CHAT_SENT_KEY;
            }
        } else {
            if (position == 0 && chats.size() > 49 && snapSize > 49) {
                return AppConstants.CHAT_LOADING_KEY;
            } else {
                return AppConstants.CHAT_RECEIVED_KEY;
            }
        }
    }
    

    它是连接到viewTypes的东西,还是我应该在绑定部分中使用if条件,因此只有当用户的id是user2时,它才会显示给他?

    谢谢


  • 共1个答案

    匿名用户

    它是连接到viewTypes的东西,还是我应该在绑定部分中使用if条件,因此只有当用户的id是user2时,它才会显示给他?

    ViewTypes用于显示不同的布局,通常是与其他布局完全不同的布局。

    因此,在您的情况下,修改bind部分中的逻辑更适合于您,使其只显示给user2。