2016-03-25 9 views
3

私は、体重が割り当てられた線形レイアウトのテキストビューと画像ビューを持っています。この線形レイアウトはリスト項目用です。 PicasaのライブラリもonError()に戻りますので、imageのURLに問題があることがあります。 このようなシナリオでは、テキストビューは、その重みによって決まるものではなく、完全な幅を占めることが必要です。インターネットからダウンロードした画像に基づいてテキストビューの幅を調整する方法

レイアウトスニペット:アダプタで

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

これは、コールバックは、いくつかの遅延の後に来るように動作しているようだしない、と私のTextViewがすでにいくつかで更新されますレイアウト重さに応じたtextView幅の値。過ぎ去ったに

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

セットのTextView幅を "fill_parent" のようなコードで、あなたのTextView paramsはを変更するとのonErrorでImageViewの()ハンドラを非表示にすることができます。 – AKSiddique

答えて

3

てみ視界GONEerrorを設定しますデフォルトでは、イメージは表示されず、TextViewはすべてのスペースを取得します。イメージの読み込みが成功した場合のみ、ImageViewの可視性を可視に設定します。

また、イメージをロードするとエラーが返された場合は、他の方法でラウンドして表示を設定することもできます。イメージが読み込まれている間にローディングインジケータイメージを表示する予定がある場合、これはより良いアプローチになります。

0

あなたはImageViewのの可視性を設定する必要があります。それはsuccessとき、あなたはVISIBLEを設定する必要がありますListView行である場合

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

0

あなたはこの

textView.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 
関連する問題