Android 如果我能';i don’我不能理解上下文我怎样才能像Picaso一样使用?
我使用firbase ui显示一个Android 如果我能';i don’我不能理解上下文我怎样才能像Picaso一样使用?,android,firebase,firebase-realtime-database,picasso,Android,Firebase,Firebase Realtime Database,Picasso,我使用firbase ui显示一个recyclerView,它扩展了活动,如下所示: FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<ChatItem, ExpenseHolder> (ChatItem.class, R.layout.chat_room_list, ExpenseHolder.class, secondRoot) { @Override
recyclerView
,它扩展了活动,如下所示:
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<ChatItem, ExpenseHolder>
(ChatItem.class, R.layout.chat_room_list, ExpenseHolder.class, secondRoot) {
@Override
protected void populateViewHolder(ExpenseHolder viewHolder, ChatItem chatItem, int position) {
viewHolder.setValues(chatItem);
}
};
recyclerChat.scrollToPosition(adapter.getItemCount() - 1);//just let the latest data below
//recyclerChat.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));//增加橫線
recyclerChat.setAdapter(adapter);
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerChat.setLayoutManager(manager);
当我想使用Picaso设置图像时,我发现无法获取contex
我尝试在静态上下文上下文中设置全局privat代码>,它显示错误上下文为空
这是我想要展示的资源
如何在静态环境中显示资源为url的图像?试试这种方法
Picasso.with(rightImage.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
这样试试
Picasso.with(rightImage.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
您可以从itemView
Picasso.with(itemView.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
您可以从itemView
Picasso.with(itemView.getContext()).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
您甚至可以通过将上下文传递到ExpenseViewHolder
public static class ExpenseHolder extends RecyclerView.ViewHolder {
private final TextView textRightMsg;
private final TextView textLeftMsg;
private final TextView rightTime;
private final ImageView rightImage;
private Context context;
public ExpenseHolder(View itemView, Context context) {
super(itemView);
this.context = context;
textRightMsg = (TextView) itemView.findViewById(R.id.textRight);
textLeftMsg = (TextView) itemView.findViewById(R.id.textLeft);
rightTime = (TextView) itemView.findViewById(R.id.rightTime);
rightImage = (ImageView) itemView.findViewById(R.id.rightImage);
}
public void setValues(ChatItem chatItem) {
String myName = chatItem.getName();
if (myName.equals(userName)) {
textRightMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
rightTime.setText(chatItem.getTime());
// I don't know how to get context in this class
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
} else {
textLeftMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
}
}
}
您甚至可以通过将上下文传递到ExpenseViewHolder
public static class ExpenseHolder extends RecyclerView.ViewHolder {
private final TextView textRightMsg;
private final TextView textLeftMsg;
private final TextView rightTime;
private final ImageView rightImage;
private Context context;
public ExpenseHolder(View itemView, Context context) {
super(itemView);
this.context = context;
textRightMsg = (TextView) itemView.findViewById(R.id.textRight);
textLeftMsg = (TextView) itemView.findViewById(R.id.textLeft);
rightTime = (TextView) itemView.findViewById(R.id.rightTime);
rightImage = (ImageView) itemView.findViewById(R.id.rightImage);
}
public void setValues(ChatItem chatItem) {
String myName = chatItem.getName();
if (myName.equals(userName)) {
textRightMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
rightTime.setText(chatItem.getTime());
// I don't know how to get context in this class
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(rightImage);
} else {
textLeftMsg.setText(chatItem.getMsg() + "(" + chatItem.getName() + ")");
}
}
}
请尝试textRightMsg.getContext()
谢谢!它可以工作,我现在就可以试试textRightMsg.getContext()
谢谢!它是有效的,我现在知道了。我认为它可能也可以解决这个问题,但是当我尝试它时,它显示错误java.lang.IllegalArgumentException:Context不能为null。那么最好使用视图的上下文。因为我刚才看到,viewholder的对象是自动启动的,而不是您使用自己的构造函数。我认为它可能也可以解决这个问题,但当我尝试时,它显示错误java.lang.IllegalArgumentException:Context不能为null。那么最好使用视图的上下文。因为我刚才看到,viewholder的对象是自动启动的,而不是使用自己的构造函数。下载图像是一个很长时间的后台过程,所以在使用活动上下文时要小心。您可能会导致内存泄漏。下载图像是一个长时间的后台过程,因此在使用活动上下文时要小心。您可能会导致内存泄漏。