同样,我一直试图在网上找到答案。但是我似乎找不到符合我的问题。
基本上,我有一个来自我正在使用的API的表情符号列表,我正在尝试将这些图像显示在TextView中,这些图像无法正常工作。图像在我的回收视图中显示为蓝色方块,直到我向上滚动它们然后它们出现。这是我的代码,我不确定我在做什么是正确的。我不记得为什么我做了我做的,因为它的旧代码,我正在尝试重构它。有人可以帮忙吗?
以下是代码:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Posts posts = mPost.getItem(position);
emoticons = mEmoticon.getItems();
String message = null;
String emoMessage = null;
if (posts.getPost() != null) {
if (posts.getPost().getMessage() != null) {
message = posts.getPost().getMessage();
emoMessage = message;
if (emoticons != null) {
for (Emoticons emoticon : this.emoticons) {
if (message.contains(emoticon.getEmoticon().getCode())) {
emoMessage = message.replaceAll(Constants.EMO_REGEX, emoticon.getEmoticon().getUrl());
}
}
}
holder.mPostTextView.setText(Html.fromHtml(emoMessage, new Html.ImageGetter() {
@Override
public Drawable getDrawable(final String source) {
Target loadTarget;
loadTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
URL url = new URL(source);
InputStream is = url.openStream();
Bitmap b = BitmapFactory.decodeStream(is);
mDrawable = new BitmapDrawable(Resources.getSystem(), b);
mDrawable.setBounds(0, 0, mDrawable.getIntrinsicWidth() + 25, mDrawable.getIntrinsicHeight() + 25);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Picasso.with(mContext).load(source).into(loadTarget);
return mDrawable;
}
}, null);
}
答案 0 :(得分:0)
看来,当你调用mPostTextView.setText()时,你的mDrawable还没有被初始化。稍后,当调用onBitmapLoaded()时,您正在更新mDrawable以指向您新创建的BitmapDrawable。但这不会更新TextView。
我会尝试重新排列内容,以便在onBindViewHolder()中调用
Picasso.with(mContext).load(source).into(loadTarget);
然后在onBitmapLoaded()的末尾调用mPostTextView.setText()。如果您需要在此期间保留对emoMessage的引用,您可以将其作为Target中的字段传递。