【发布时间】:2017-01-02 18:33:47
【问题描述】:
如果我使用ArrayList<ArrayList<String>> 代替ArrayList<Object> 来填充recyclerView,会有什么问题吗?还是我是这里唯一的怪人?
我在每个列表项中都有图片链接。有些也没有任何图片链接。
我在显示列表时第一次保存图像,然后如果图像名称匹配,则从 sdcard 中获取图像。我也有独特的图像名称。
当我滚动视图时,不包含任何图像的项目也会显示以前加载的图像,但不会复制文本。
我也在用
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
我的适配器中的这些函数。
Adapter.java
public class ChatBoxAdapter extends RecyclerView.Adapter<ChatBoxAdapter.MyViewHolder> {
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView text,date;
public ImageView image;
public MyViewHolder(View view) {
super(view);
text = (TextView) view.findViewById(R.id.text);
date = (TextView) view.findViewById(R.id.date);
image = (ImageView) view.findViewById(R.id.image);
}
}
Context context;
Bitmap bitmap;
public ChatBoxAdapter(Context _context) {
context = _context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_chat_box, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
String comment = Base.chatdatalist.get(position).get(3);
String image_url = Base.chatdatalist.get(position).get(4);
String date = Base.chatdatalist.get(position).get(5);
File imageFile = null;
if (image_url.startsWith(Base.baseUrl)) {
String image_name = image_url.substring(image_url.lastIndexOf("/")+1);
imageFile = new File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/TMS Sent Images/" + image_name);
bitmap = null;
if (imageFile.exists()) {
BitmapFactory.Options options = new BitmapFactory.Options();
long img_size = imageFile.length() / 1024;
if (img_size <= 200)
options.inSampleSize = 4;
else
options.inSampleSize = 8;
bitmap = BitmapFactory.decodeFile(imageFile.toString(), options);
}
}
holder.text.setText(Html.fromHtml(comment, null, new MyTagHandler()));
if (position !=0 && !chat_date.equals(Base.chatdatalist.get(position - 1).get(15)))
holder.date.setVisibility(View.VISIBLE);
if (position == 0)
holder.date.setVisibility(View.VISIBLE);
if (bitmap != null) {
holder.image.setImageBitmap(bitmap);
holder.image.setVisibility(View.VISIBLE);
} else
if (image_url.startsWith(Base.baseUrl)) {
holder.image.setVisibility(View.VISIBLE);
Picasso.with(context).load(image_url).into(holder.image);
}
}
@Override
public int getItemCount() {
return Base.chatdatalist.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
}
可能是什么问题?
提前致谢。
【问题讨论】:
-
这个问题不清楚,你有一个arraylist 的arraylist 表明你的数据存在一对多类型的关系,例如,一个列表项可能有多个路径,是这样吗?
-
这些功能在大多数适配器中,发布您的完整适配器代码
-
是的……假设我有一个数组列表commentData,我可以做到
commentData.add(arrayList); -
您是否尝试将具有字符串值的 ArrayLists 存储在 ArrayList 中?目的是什么?
-
代替 ArrayList
标签: android arraylist android-recyclerview adapter android-viewholder