发送请求以加载图像时,CardAdapter会自动跳转

时间:2017-07-24 11:44:18

标签: java android rest android-layout android-asynctask

我正在尝试实现一个类似IM的应用程序,但我遇到的问题确实让我烦恼。

我使用recyclerview以滚动方式显示消息,以便用户可以滚动视图以查看所有消息。消息的基本布局是cardview  小部件。

此外,我在消息的布局中使用了另一种布局,也是cardview来显示子消息。

为了更详细,我想想象一下我使用的布局。请看下面的图片:

Layouts

如您所见,我使用两个嵌套的卡片视图(彼此内部)。此外,当我使用recyclerview作为子消息时,我有滚动行为。当我滚动子消息时,将调用recyclelerview的onBindViewHolder方法。要检索每个图像,我在onBindViewHolder方法中调用API。

现在当我想要滚动子消息时出现问题。似乎在调用API时出现了问题。虽然从API成功检索图像,但它会向下跳转到屏幕。

例如,如果我向上滚动上一条消息的子消息。它最终得到以下结果:

enter image description here

这是适用于子消息的onBindViewHolder()方法,对于处理图像,我使用Glide android库:

public class SubMenuAdapter extends RecyclerView.Adapter<SubMenuAdapter.ViewHolder> {
    .
    .
    .
    public void onBindViewHolder(ViewHolder holder, int position) {
    SubMessage subMessage = subMessageList.get(position);
        final long mediaFileId = subMessage.getMediaFileId();
        holder.ivSubmessageImage.setImageDrawable(null);
        if (mediaFileId != 0) {
            holder.ivSubmessageImage.setImageResource(R.mipmap.ic_launcher);
                holder.ivSubmessageImage.setMinimumHeight(100);
                holder.ivSubmessageImage.setMinimumWidth(200);
                Glide.with(context).load(Config.FILE_SERVER_URL+"api/file/" + mediaFileId + "/thumb")
                        .into(holder.ivSubmessageImage);
                holder.ivSubmessageImage.setVisibility(View.VISIBLE);
         } else {
                holder.ivSubmessageImage.setImageBitmap(null);
                holder.ivSubmessageImage.setVisibility(View.INVISIBLE);
         }
    ...

    }
    .
    .
    .
}

这是我创建的布局(目前):

channel_log_list.xml (msgCardview)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    app:cardCornerRadius="8dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/MyCardViewStyle"
    android:layout_marginTop="3dp"
    android:padding="2dp"
    android:layout_marginBottom="1dp"
    android:foreground="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:layout_marginRight="23dp"
    app:cardPreventCornerOverlap="false"
    android:layout_marginLeft="23dp"
    app:cardBackgroundColor="@color/chatMsgBg"
    android:id="@+id/channelLogCard"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <ImageView
                    android:layout_width="45dp"
                    android:layout_height="45dp"
                    android:id="@+id/ivMessageImage"/>

                <com.example.TextViewPlus
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="end"
                    android:text="messages"
                    app:customFont="@string/irs"
                    android:id="@+id/channelLogAppletTitle"
                    android:textSize="@dimen/content_text_size_small2"
                    android:layout_marginBottom="10dp"/>

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/lstSubMessages"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"/>

            </LinearLayout>
        </LinearLayout>
</android.support.v7.widget.CardView>

sub_message_list_item.xml (subMsgCardview)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="200dp"
    app:cardCornerRadius="3dp"
    android:layout_height="300dp"
    style="@style/SubMessageCardViewStyle"
    android:id="@+id/SubMessageCard">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layoutDirection="rtl">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="110dp"
            android:id="@+id/ivSubMessageImage"
            android:visibility="invisible"/>
        <com.example.TextViewPlus
            android:padding="5dp"
            android:layout_marginTop="10dp"
            android:id="@+id/tvText"
            app:customFont="@string/irs"
            android:textSize="@dimen/content_text_size_small1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</android.support.v7.widget.CardView>

1 个答案:

答案 0 :(得分:0)

制作您的Cardview android:focusableInTouchMode="true" or make that layout which you want to focus