问题描述
我正在尝试建立一个聊天页面(消息视图)。
有图像和文本消息。 我为此使用Firebase。
所以我尝试了自己的代码。 而且它也在显示图像。 我的意思是不同的布局正在工作。 但是问题是,在关闭应用程序后,然后当我重新打开时。 我看到的是字符串而不是图像的链接。
这是我的ArrayAdapter。
public class ChatAdapter extends BaseAdapter {
ArrayList<String> message = new ArrayList<> ();
ArrayList<Integer> image = new ArrayList<> ();
Context c;
String username;
String otherusername;
ArrayList<Integer> type = new ArrayList<> ();
public ChatAdapter(ArrayList<String> message, ArrayList<Integer> image, Context c, String username, String otherusername, ArrayList<Integer> type) {
this.message = message;
this.image = image;
this.c = c;
this.username = username;
this.otherusername = otherusername;
this.type = type;
}
@Override
public int getCount() {
return message.size ();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public static class ViewHolder {
ImageView imageView;
TextView messageView;
CircleImageView profileImage;
}
@Override
public int getViewTypeCount() {
return 4;
}
@Override
public int getItemViewType(int position) {
return type.get (position);
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
int messageType = getItemViewType (position);
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (messageType==1){
v = View.inflate (c,R.layout.chatroom_image,null);
}
else {
v = View.inflate (c, R.layout.message_item, null);
}
}
if (messageType==1){
holder = new ViewHolder ();
holder.imageView = (ImageView) v.findViewById (R.id.imageMessage);
holder.profileImage = (CircleImageView) v.findViewById (R.id.profile_image);
Picasso.with(c).load(image.get (position)).into(holder.imageView);
}
else {
holder = new ViewHolder ();
holder.messageView = (TextView) v.findViewById (R.id.message_view);
holder.profileImage = (CircleImageView) v.findViewById (R.id.profile_image);
holder.messageView.setText (message.get (position));
holder.profileImage.setImageResource (image.get (position));
}
return v;
}
}
在Firebase中,数据结构如下所示。
messageList.setAdapter (new ChatAdapter (message_list, profile_img_list, getApplicationContext (), Fusername, chat_username,types));
而且我正在记录数据,它完美地显示了一切。
谢谢您的帮助。
1楼
我建议您使用RecyclerView
而不是旧的ListView
。
ListView
确实有点过时了。
此处提供了有关如何在RecyclerView
使用不同ItemView的示例: :
2楼
在当前实现中,如果convert视图不为null,则不会用数据填充项目。 这意味着列表视图将显示带有旧数据的项目。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// inflate view
// populate view
}
}
尝试移动代码以在null检查之外填充视图持有者。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// inflate view
}
// always populate view
}