我正在尝试使用 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);
}
}
}
使用整个适配器进行编辑
最佳答案
the real walls will be from web so that array of drawable will be an array of links or a json
您绝对不想加载全尺寸壁纸图像以用于网格中的缩略图。这将非常慢,并且您将耗尽堆空间。
对于您的短期测试,我只需使用图形编辑器准备一些缩略图,然后使用它们。
对于下载壁纸的“for realz”应用程序,您将需要使用第三方库,例如 Picasso 或 Universal Image Loader,它们可以在后台加载图像,将其缩小采样到缩略图大小,等等。 This sample app使用 Picasso 演示 ListView
(阅读 Stack Overflow 问题)。 This sample app演示 RecyclerView
与通用图像加载器(从设备上的视频中读取视频缩略图)。
关于java - 跳过了 46 帧!应用程序可能在其主线程上做了太多工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30227114/