2016-03-25 9 views
3

Ich habe eine Textansicht und eine Bildansicht in lineares Layout mit Gewicht zugewiesen. Dieses lineare Layout ist für Listenelemente. Problem ist manchmal, die URL für Bild, gibt Fehler, so Picasso Bibliothek kehrt auch zu onError(). Für solche Szenarien möchte ich, dass die Textansicht die volle Breite einnehmen soll und nicht das Gewicht.wie Textview Breite basierend auf Bilder aus dem Internet heruntergeladen

Layout-Schnipsel:

<TextView 
     android:id="@+id/content" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:textAppearance="@style/TextAppearance.AppCompat.Small" 
     android:layout_gravity="center_vertical" 
     android:layout_weight="5" /> 
    <ImageView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/image" 
     android:layout_gravity="center" 
     android:adjustViewBounds="true" 
     android:layout_weight="2"/> 
</LinearLayout> 

Picasso-Schnipsel in Adapter:

Picasso.with(mContext).load(mValues.get(position).getString("imageHref")) 
    .into(holder.mImageView, new Callback() { 
     @Override 
     public void onSuccess() { 
     } 

     @Override 
     public void onError() { 
      holder.mContentView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT; 

      try { 
       holder.mContentView.setText(mValues.get(position).getString("description")); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
}); 

Dies ist nicht als der Rückruf nach einer gewissen Verzögerung kommt zu funktionieren scheint, und meine Textview ist bereits mit einigen aktualisiert Wert für TextView Breite nach Layout Gewicht.

+1

Set Textview Breite "fill_parent" und der Imageview in onError() -Prozedur verstecken. – AKSiddique

Antwort

3

Versuchen Sichtbarkeit einstellen GONE wenn error:

@Override 
public void onError() { 
    mImageView.setVisibility(View.GONE); 
    [...] 
} 

Wenn es ListView Reihe ist, dann müssen Sie VISIBLE gesetzt, wenn success:

@Override 
public void onSuccess() { 
    mImageView.setVisibility(View.VISIBLE); 
} 
0

Sie die Sichtbarkeit des Image setzen sollte, um weg Standard, so dass das Bild nicht angezeigt wird und die TextView den gesamten Speicherplatz erhält. Nur wenn das Laden des Bilds erfolgreich war, legen Sie die Sichtbarkeit von ImageView auf sichtbar fest.

Oder Sie können es auch anders herum tun und die Sichtbarkeit auf "weg" setzen, wenn das Laden des Bildes einen Fehler zurückgibt. Dies wäre der bessere Ansatz, wenn Sie ein Ladeindikatorbild anzeigen möchten, während das Bild geladen ist.

0

können Sie Ihre Textview params wie diese

von Code ändern
textView.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 
Verwandte Themen