package com.oreilly.android.otweet.layouts; import java.io.IOException; import com.oreilly.android.otweet.R; import twitter4j.Status; import twitter4j.User; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; public class StatusListItem extends RelativeLayout { final private Handler handler = new Handler(); private ImageView avatarView; private TextView screenName; private TextView statusText; protected Drawable avatarDrawable; private Runnable finishedLoadingDrawable = new Runnable() { public void run() { finishedLoadingUserAvatar(); } }; public StatusListItem(Context context, AttributeSet attrs) { super(context, attrs); } public void setStatus(Status status) { final User user = status.getUser(); findViews(); screenName.setText(user.getScreenName()); statusText.setText(status.getText()); avatarView.setImageDrawable(null); Thread loadUserAvatarThread = new Thread() { @Override public void run() { try { avatarDrawable = Drawable.createFromStream( user.getProfileImageURL().openStream(), user.getName() ); } catch (IOException e) { Log.e(getClass().getName(), "Could not load image.", e); } handler.post(finishedLoadingDrawable); } }; loadUserAvatarThread.start(); } protected void finishedLoadingUserAvatar() { avatarView.setImageDrawable(avatarDrawable); } private void findViews() { avatarView = (ImageView)findViewById(R.id.user_avatar); screenName = (TextView)findViewById(R.id.status_user_name_text); statusText = (TextView)findViewById(R.id.status_text); } }