2017-07-24 5 views
0

J'essaye d'implémenter une application de type IM, mais je suis coincé sur un problème qui m'ennuie vraiment.CardAdapter saute automatiquement quand une demande est envoyée pour charger l'image

J'utilise recyclerview pour afficher les messages de manière défilante, afin que les utilisateurs puissent faire défiler les vues pour voir tous les messages. La présentation de base des messages est un widget cardview .

En outre, j'ai utilisé une autre disposition dans la disposition des messages qui est également cardview pour afficher les sous-messages.

Pour être plus détaillé, j'aimerais visualiser les dispositions que j'ai utilisées. Regardez l'image suivante:

Layouts

Comme vous le voyez, j'utilise deux cardviews imbriqués (dans l'autre). De plus, comme j'utilise recyclerview pour les sous-messages, j'ai un comportement de défilement. Lorsque je fais défiler des sous-messages, la méthode onBindViewHolder de recyclerview est appelée. Pour récupérer chaque image, j'appelle une API dans la méthode onBindViewHolder.

Maintenant, le problème se pose lorsque je veux faire défiler les sous-messages. Il semble que lorsque l'API est appelée quelque chose ne va pas. Bien que l'image soit récupérée avec succès à partir de l'API, elle saute vers le bas et vers le haut de l'écran.

Par exemple, si je fais défiler les sous-messages du dernier message vers la droite. Il se termine par le résultat suivant:

enter image description here

Ceci est la méthode onBindViewHolder() des sous-messages adaptés, pour travailler avec les images, j'utilise la bibliothèque Android Glide:

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); 
     } 
    ... 

    } 
    . 
    . 
    . 
} 

Ce sont les mises en page que j'ai créé (pour le moment):

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> 
+0

android:focusableInTouchMode="true" or make that layout which you want to focus Je vais avoir cette question. Avez-vous trouvé une solution pour cela? – dazza5000

+0

Oui! J'ai utilisé la bibliothèque Fresco à la place des éléments natifs d'Android. Je vous recommande également d'utiliser comme il fournit des options intéressantes pour travailler avec des images :) il vaut vraiment la peine @ dazza5000 –

+0

J'utilise Glide si ... – dazza5000

Répondre

0

rendre votre

Vignettes
+0

Je ne fonctionne pas :( –

+0

Regardez, je pense que le problème peut être venu de demander des méthodes Avez-vous une opinion à ce sujet? @NileshRathod –

+0

nop @inverted_index –