Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有多视图的recycler视图的最后一项出错_Android_Android Recyclerview - Fatal编程技术网

Android 具有多视图的recycler视图的最后一项出错

Android 具有多视图的recycler视图的最后一项出错,android,android-recyclerview,Android,Android Recyclerview,我正在尝试实现一个聊天应用程序,其中recycler视图有多个视图布局。但每次聊天的最后一项都不在原位,但当我们向上滚动并向下滚动时,它会回到原位。 这是我的适配器: @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { mAuth = FirebaseAuth.getInstance(); currentUse

我正在尝试实现一个聊天应用程序,其中recycler视图有多个视图布局。但每次聊天的最后一项都不在原位,但当我们向上滚动并向下滚动时,它会回到原位。 这是我的适配器:

     @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int 
       viewType) {

    mAuth = FirebaseAuth.getInstance();
    currentUserId = mAuth.getCurrentUser().getUid();
    View view;
    switch (viewType) {
        case TEXT_TYPE_OTHER:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_single_layout, parent, false);
            return new TextMessageViewHolder(view);
        case TEXT_TYPE_USER:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_single_layout_user, parent, false);
            return new TextMessageViewHolderUser(view);
        case IMAGE_TYPE_OTHER:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_image_single_layout, parent, false);
            return new ImageMessageViewHolder(view);
        case IMAGE_TYPE_USER:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_image_single_layout_user, parent, false);
            return new ImageMessageViewHolderUser(view);
        case IMAGE_TEXT_TYPE_OTHER:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_image_single_layout_with_text, parent, false);
            return new ImageMessageWithTextViewHolder(view);
        case IMAGE_TEXT_TYPE_USER:
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_image_single_layout_with_text_user, parent, false);
            return new ImageMessageWithTextViewHolderUser(view);
    }
    return null;
}

public class TextMessageViewHolder extends RecyclerView.ViewHolder {
    private TextView time;
    private TextView messageText;
    //private CardView cardView;
    private TextView textDate;
    private View view;

    public TextMessageViewHolder(View view) {
        super(view);
        messageText = view.findViewById(R.id.message_text_layout);
        time = view.findViewById(R.id.time_text_layout);
        textDate = view.findViewById(R.id.text_chat_date);
        //cardView = itemView.findViewById(R.id.cardView);
        view = itemView.findViewById(R.id.text_message_view);
    }
}


public class TextMessageViewHolderUser extends RecyclerView.ViewHolder {
    private TextView timeUser;
    private TextView messageTextUser;
    private TextView textDateUser;
    //private CardView cardViewUser;
    private View view;

    public TextMessageViewHolderUser(View view) {
        super(view);
        messageTextUser = view.findViewById(R.id.message_text_layout_user);
        timeUser = view.findViewById(R.id.time_text_layout_user);
        textDateUser = view.findViewById(R.id.text_chat_date_user);
        //cardViewUser = itemView.findViewById(R.id.cardViewUser);
        view = itemView.findViewById(R.id.text_message_view_user);

    }
}

public class ImageMessageWithTextViewHolder extends RecyclerView.ViewHolder {
    private ImageView messageImage;
    //private CardView imageMessage;
    private TextView imageText;
    private TextView imageTime;
    private TextView imageTextDate;
    private View view;

    public ImageMessageWithTextViewHolder(View itemView) {
        super(itemView);
        imageText = itemView.findViewById(R.id.imageText_with_text);
        imageTime = itemView.findViewById(R.id.time_text_layout_image_with_text);
        messageImage = itemView.findViewById(R.id.message_image_layout_with_text);
        imageTextDate = itemView.findViewById(R.id.text_image_chat_date);
        view = itemView.findViewById(R.id.text_message_image_view);
        //imageMessage = itemView.findViewById(R.id.imageMessageWithText);
    }
}

public class ImageMessageWithTextViewHolderUser extends RecyclerView.ViewHolder {
    private ImageView messageImageUser;
    //private CardView imageMessageUser;
    private TextView imageTextUser;
    private TextView imageTimeUser;
    private TextView imageTextDateUser;
    private View view;

    public ImageMessageWithTextViewHolderUser(View itemView) {
        super(itemView);
        imageTextUser = itemView.findViewById(R.id.imageText_with_text_user);
        imageTimeUser = itemView.findViewById(R.id.time_text_layout_image_with_text_user);
        messageImageUser = itemView.findViewById(R.id.message_image_layout_with_text_user);
        imageTextDateUser = itemView.findViewById(R.id.text_image_chat_date_user);
        view = itemView.findViewById(R.id.text_message_image_user_view);

        //imageMessageUser = itemView.findViewById(R.id.imageMessageWithTextUser);
    }
}

public class ImageMessageViewHolder extends RecyclerView.ViewHolder {
    private ImageView messageImage;
    //private CardView cardView;
    private TextView imageTime;
    private TextView imageChatDate;
    private View view;

    public ImageMessageViewHolder(View itemView) {
        super(itemView);
        imageTime = itemView.findViewById(R.id.time_text_layout_image);
        //cardView = itemView.findViewById(R.id.imageMessage);
        messageImage = itemView.findViewById(R.id.message_image_layout);
        imageChatDate = itemView.findViewById(R.id.image_chat_date);
        view = itemView.findViewById(R.id.message_image_view);

    }
}

public class ImageMessageViewHolderUser extends RecyclerView.ViewHolder {
    private ImageView messageImageUser;
    //private CardView cardViewUser;
    private TextView imageTimeUser;
    private TextView imageChatDateUser;
    private View view;

    public ImageMessageViewHolderUser(View itemView) {
        super(itemView);
        imageTimeUser = itemView.findViewById(R.id.time_text_layout_image_user);
        //cardViewUser = itemView.findViewById(R.id.imageMessageUser);
        messageImageUser = itemView.findViewById(R.id.message_image_layout_user);
        imageChatDateUser = itemView.findViewById(R.id.image_chat_date_user);
        view = itemView.findViewById(R.id.message_image_view_user);

    }
}

        public int getItemViewType(int position) {
        switch (mMessageList.get(position).getType()){
        case 0:
            if (mMessageList.get(position).getFrom().equals(currentUserId))
                return TEXT_TYPE_USER;
            else
                return TEXT_TYPE_OTHER;
        case 1:
            if (mMessageList.get(position).getFrom().equals(currentUserId))
                return IMAGE_TYPE_USER;
            else
                return IMAGE_TYPE_OTHER;
        case 2:
            if (mMessageList.get(position).getFrom().equals(currentUserId))
                return IMAGE_TEXT_TYPE_USER;
            else
                return IMAGE_TEXT_TYPE_OTHER;
        default:
            return 1234567890;
    }
}


public void onBindViewHolder(final RecyclerView.ViewHolder holder, int listPosition) {

    final Messages object = mMessageList.get(holder.getAdapterPosition());
    final String fromUser = object.getFrom();
    final String lastSeenTime = DateFormat.format("HH:mm", new Date(object.getTime())).toString();
    RequestBuilder<Drawable> thumbnailRequestBlogImage;
    thumbnailRequestBlogImage =glide.load(object.getThumb());

        switch (holder.getItemViewType()) {
            case TEXT_TYPE_USER:
                    ((TextMessageViewHolderUser) holder).messageTextUser.setText(object.getMessage());
                    ((TextMessageViewHolderUser) holder).timeUser.setText(lastSeenTime);
                break;
            case TEXT_TYPE_OTHER:
                    ((TextMessageViewHolder) holder).messageText.setText(object.getMessage());
                    ((TextMessageViewHolder) holder).time.setText(lastSeenTime);
                break;
            case IMAGE_TYPE_USER:
                    ((ImageMessageViewHolderUser) holder).imageTimeUser.setText(lastSeenTime);
                   glide.load(object.getImage())
                            .apply(new RequestOptions().dontAnimate().dontTransform())
                            .thumbnail(thumbnailRequestBlogImage)
                            .listener(new RequestListener<Drawable>() {
                                @Override
                                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                    return false;
                                }

                                @Override
                                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                                    return false;
                                }
                            })
                            .into(((ImageMessageViewHolderUser) holder).messageImageUser);
                break;
            case IMAGE_TYPE_OTHER:

                    ((ImageMessageViewHolder) holder).imageTime.setText(lastSeenTime);
                    glide.load(object.getImage())
                            .apply(new RequestOptions().dontAnimate().dontTransform())
                            .thumbnail(thumbnailRequestBlogImage)
                            .listener(new RequestListener<Drawable>() {
                                @Override
                                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                    return false;
                                }

                                @Override
                                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                                    return false;
                                }
                            })
                            .into(((ImageMessageViewHolder) holder).messageImage);
                break;
            case IMAGE_TEXT_TYPE_USER:

                    ((ImageMessageWithTextViewHolderUser) holder).imageTextUser.setText(object.getImageText());
                    ((ImageMessageWithTextViewHolderUser) holder).imageTimeUser.setText(lastSeenTime);

                    glide.load(object.getImage())
                            .apply(new RequestOptions().dontAnimate().dontTransform())
                            .thumbnail(thumbnailRequestBlogImage)
                            .listener(new RequestListener<Drawable>() {
                                @Override
                                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                    return false;
                                }

                                @Override
                                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                                    return false;
                                }
                            })
                            .into(((ImageMessageWithTextViewHolderUser) holder).messageImageUser);
                break;
            case IMAGE_TEXT_TYPE_OTHER:

                    ((ImageMessageWithTextViewHolder) holder).imageText.setText(object.getImageText());
                    ((ImageMessageWithTextViewHolder) holder).imageTime.setText(lastSeenTime);

                    glide.load(object.getImage())
                            .apply(new RequestOptions().dontAnimate().dontTransform())
                            .thumbnail(thumbnailRequestBlogImage)
                            .listener(new RequestListener<Drawable>() {
                                @Override
                                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                    return false;
                                }

                                @Override
                                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                                    return false;
                                }
                            })
                            .into(((ImageMessageWithTextViewHolder) holder).messageImage);

                break;
        }
}
@覆盖
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int
视图类型){
mAuth=FirebaseAuth.getInstance();
currentUserId=mAuth.getCurrentUser().getUid();
视图;
开关(视图类型){
案例文本\类型\其他:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.message\u single\u布局,parent,false);
返回新的TextMessageViewHolder(视图);
案例文本类型用户:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.message\u single\u layout\u user,parent,false);
返回新的TextMessageViewHolderUser(视图);
案例图像\类型\其他:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.message\u image\u single\u布局,parent,false);
返回新的ImageMessageViewHolder(视图);
案例图像类型用户:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.message\u image\u single\u layout\u user,parent,false);
返回新的ImageMessageViewHolderUser(视图);
案例图像\文本\类型\其他:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.message\u image\u single\u layout\u with\u text,parent,false);
返回新的ImageMessageWithTextViewHolder(视图);
案例图像\文本\类型\用户:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.message\u image\u single\u layout\u with\u text\u user,parent,false);
返回带有TextViewHolderUser(视图)的新图像消息;
}
返回null;
}
公共类TextMessageViewHolder扩展了RecyclerView.ViewHolder{
私有文本查看时间;
私有文本查看消息文本;
//私人卡视图卡视图;
私有文本查看文本日期;
私人视野;
公共文本消息视图持有者(视图){
超级(视图);
messageText=view.findViewById(R.id.message\u text\u布局);
时间=view.findViewById(R.id.time\u text\u布局);
textDate=view.findviewbyd(R.id.text\u chat\u date);
//cardView=itemView.findViewById(R.id.cardView);
view=itemView.findViewById(R.id.text\u message\u view);
}
}
公共类TextMessageViewHolderUser扩展了RecyclerView.ViewHolder{
私有文本视图时间用户;
私有文本视图消息文本用户;
私有TextView textDateUser;
//私人卡查看卡查看用户;
私人视野;
public TextMessageViewHolderUser(查看){
超级(视图);
messageTextUser=view.findViewById(R.id.message\u text\u layout\u user);
timeUser=view.findViewById(R.id.time\u text\u layout\u user);
textDateUser=view.findviewbyd(R.id.text\u chat\u date\u user);
//cardViewUser=itemView.findViewById(R.id.cardViewUser);
view=itemView.findViewById(R.id.text\u message\u view\u user);
}
}
公共类ImageMessageWithTextViewHolder扩展了RecyclerView.ViewHolder{
私有图像查看消息图像;
//私人卡查看图像信息;
私有文本查看图像文本;
私有文本查看图像时间;
私有文本视图imageTextDate;
私人视野;
公共图像消息WithTextViewHolder(查看项目视图){
超级(项目视图);
imageText=itemView.findViewById(R.id.imageText\u和\u text);
imageTime=itemView.findViewById(R.id.time\u text\u layout\u image\u with\u text);
messageImage=itemView.findviewbyd(R.id.message\u image\u layout\u带文本);
imageTextDate=itemView.findViewById(R.id.text\u image\u chat\u date);
view=itemView.findViewById(R.id.text\u message\u image\u view);
//imageMessage=itemView.findViewById(R.id.imageMessageWithText);
}
}
公共类ImageMessageWithTextViewHolderUser扩展了RecyclerView.ViewHolder{
私有ImageView消息ImageUser;
//私用卡查看imageMessageUser;
私有文本视图imageTextUser;
私有文本视图imageTimeUser;
私有文本视图imageTextDateUser;
私人视野;
公共图像消息WithTextViewHolderUser(查看项目视图){
超级(项目视图);
imageTextUser=itemView.findViewById(R.id.imageText\u和\u text\u用户);
imageTimeUser=itemView.findViewById(R.id.time\u text\u layout\u image\u with\u text\u user);
messageImageUser=itemView.findViewById(R.id.message\u image\u layout\u with\u text\u user);
imageTextDateUser=itemView.findViewById(R.id.text\u image\u chat\u date\u user);
view=itemView.findViewById(R.id.text\u message\u image\u user\u view);
//imageMessageUser=itemView.findViewById(R.id.imageMessageWithTextUser);
}
}
公共类ImageMessageViewHolder扩展了RecyclerView.ViewHolder{
私有图像查看消息图像;
//私人卡视图卡视图;
私有文本查看图像时间;
私有文本视图imageChatDate;
私人视野;
公共ImageMessageViewHolder(查看项目视图){
超级(项目视图);
imageTime=itemView.findViewById(R.id.time\u text\u layout\u image);
//cardView=itemView.findViewById(R.id.imageMessage);
messageImage=itemView.findviewbyd(R.id.message\u image\u布局);
imageChatDate=itemView.findViewById(R.id.image\u chat\u date);
视图=itemView.findViewById(R.id.message\u image\u视图);
}
}
公共类ImageMessageViewHolderUser扩展了RecyclerView.ViewHolder{
私有ImageView消息ImageUser;
//私人卡查看卡查看用户;
私有文本视图imageTimeUser;
私有文本视图imageChatDateUser;
私人视野;
public ImageMessageViewHolderUser(查看项目视图){
超级(项目视图);
imageTimeUser=itemView.findViewById(R.id.time\u text\u layout\u image\u user);
//cardViewUser=itemView.findViewById(R.id.imageMessageUser);
messageImageUser=itemView.findViewById(R。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#cfd8dc"
tools:context=".Activities.ChatActivity">

<android.support.v7.widget.RecyclerView
            android:layout_above="@+id/linearLayout"
            android:id="@+id/messages_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </android.support.v7.widget.RecyclerView>

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:background="@android:color/white"
    android:orientation="horizontal"
    android:weightSum="10">

    <ImageButton
        android:layout_gravity="center"
        android:id="@+id/chat_add_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:alpha="0.5"
        android:background="@android:color/white"
        android:padding="10dp"
        app:srcCompat="@drawable/ic_add_black_24dp" />

    <EditText
        android:id="@+id/chat_message_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="8"
        android:background="@android:color/white"
        android:ems="10"
        android:hint="Enter Message..."
        android:inputType="textPersonName"
        android:paddingBottom="12dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="14dp" />

    <ImageButton
        android:layout_gravity="center"
        android:id="@+id/chat_send_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:alpha="0.5"
        android:background="@android:color/white"
        android:padding="10dp"
        app:srcCompat="@drawable/ic_send_black_24dp" />
</LinearLayout>
</RelativeLayout>
 @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int 
   viewType) {

        mAuth = FirebaseAuth.getInstance();
        currentUserId = mAuth.getCurrentUser().getUid();
       ........}
public int getItemViewType(int position) {
    switch (mMessageList.get(position).getType()){
    case 0:
        if (mMessageList.get(position).getFrom().equals(currentUserId))
            return TEXT_TYPE_USER;
        else
            return TEXT_TYPE_OTHER;
    case 1:
        if (mMessageList.get(position).getFrom().equals(currentUserId))
            return IMAGE_TYPE_USER;
        else
            return IMAGE_TYPE_OTHER;
    case 2:
        if (mMessageList.get(position).getFrom().equals(currentUserId))
            return IMAGE_TEXT_TYPE_USER;
        else
            return IMAGE_TEXT_TYPE_OTHER;
    default:
        return 1234567890;
    }
}