我尝试使用RecyclerView并动态地在适配器中放入八个图像。我还有每个图像的标题所以我创建2个数组和一个具有多个条件的for循环我可以设置我想要的。它有效,但不是我想要的。事实上,我进入了日志:
Skipped 46 frames! The application may be doing too much work on its main thread.
列表的滚动有很长的滞后。我怎么解决?这是代码
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
List<GridItem> mItems;
private static WallpaperManager wallpaper;
String[] title = {
"Material1",
"Material2",
"Wallpaper1",
"Wallpaper2",
"Wallpaper3",
"Wallpaper4",
"Wallpaper5",
"Wallpaper6",
"Wallpaper7"
};
private static int[] sDrawables = {
R.drawable.material,
R.drawable.materialuno,
R.drawable.materialdue,
R.drawable.materialtre,
R.drawable.materialquattro,
R.drawable.materialcinque,
R.drawable.materialsei,
R.drawable.materialsette,
R.drawable.materialotto
};
public ImageAdapter() {
super();
mItems = new ArrayList<GridItem>();
for (int i=0, j=0; i < title.length && j < sDrawables.length; i++, j++) {
GridItem wallTitle = new GridItem();
wallTitle.setName(title[i]);
wallTitle.setThumbnail(sDrawables[j]);
mItems.add(wallTitle);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_grid_layout, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int i) {
final GridItem nature = mItems.get(i);
viewHolder.tvspecies.setText(nature.getName());
viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());
viewHolder.imgThumbnail.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("CLick",nature.toString());
}
});
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public ImageView imgThumbnail;
public TextView tvspecies;
public ViewHolder(View itemView) {
super(itemView);
imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
tvspecies = (TextView)itemView.findViewById(R.id.tv_species);
}
}
}
使用整个适配器编辑
答案 0 :(得分:2)
真正的墙将来自网络,以便drawable数组将是一个链接数组或一个json
你绝对不想加载全尺寸壁纸图片以用于网格中的缩略图。这将是非常缓慢的,你将耗尽堆空间。
对于您的短期测试,我只是使用图形编辑器准备一些缩略图,然后使用它们。
对于你的&#34;对于realz&#34;在下载壁纸的应用程序中,您将需要使用第二方库,如Picasso或Universal Image Loader,它们可以在后台加载图像,将其缩小为缩略图大小,等等。 This sample app向Picasso演示ListView
(阅读Stack Overflow问题)。 This sample app使用Universal Image Loader演示RecyclerView
(从设备上的视频中读取视频缩略图)。
答案 1 :(得分:0)
我使用RecyclerView遇到了相同的问题/错误消息,延迟时间很长。我读了关于线程优化,适配器优化等的不同答案。
最后在追查问题开始时,我发现TextView
中的这个Xml是罪魁祸首
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:maxLength="300"
android:maxLines="5"
删除所有这些,只使用宽度和高度的标准值,我的问题已解决