android - RecyclerView 没有在预期的位置显示所需的卡片?

标签 android android-asynctask

所以我试图用 recyclerview 创建一个 gridlayout,每个网格代表一个 cardview。我正在通过尝试在预期位置加载数字图像(如 0,1,2....)来测试它。但是数字只是在有线的地方不停地跳来跳去,有时会重复自己。我猜这是一个适配器问题。你能看看我的代码并告诉我哪里错了吗。

public class GridAdapter  extends RecyclerView.Adapter<GridAdapter.ViewHolder>  {
private Context context;
String[] numbers;
public GridAdapter(Context context){
    super();
    this.context=context;

}
@Override
public GridAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.grid, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(GridAdapter.ViewHolder viewHolder, int i) {
    String[] numbers={//contains url's for number images strating from 0};
    Picasso.with(context).load(numbers[i]).into(ViewHolder.imageView);

}

@Override
public int getItemCount() {
    return return numbers.length;
}


static class ViewHolder extends RecyclerView.ViewHolder{

    public static ImageView imageView;

    public ViewHolder(View itemView) {
        super(itemView);
        imageView = (ImageView)itemView.findViewById(R.id.image);
    }
}
}

顺便说一句,数字数组由主 Activity 中的异步任务填充,recyclerview 和布局管理器在 onCreate 中设置,适配器在异步任务的 onPostExecute 中设置。

最佳答案

您的 ViewHolder 无法正常工作。对 ImageView 的引用不应该是 static 因为您将有多个 ViewHolders 用于列表,您将无法以这种方式存储引用.

修复您的 ViewHolder,它将正常工作。

请在此处查看示例:https://developer.android.com/training/material/lists-cards.html

关于android - RecyclerView 没有在预期的位置显示所需的卡片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31768368/

相关文章:

android - 从 Activity 向上导航回到 fragment

android - 异步任务和守护进程之间的区别

android - 当我关闭手机的互联网时,Kotlin 的 URL.readText() 崩溃

android - 微调器控件不显示所选文本

从 Eclipse 导出签名应用程序后 Android 应用程序无法运行

如果在处理时单击,Android 模拟器会崩溃

Android AsyncTask 和登录

java - Android 中 doInBackground() 方法中出现致命异常 :Async Task java. lang.OutOfMemoryError?

android - GoogleCloudMessaging.getInstance(未知来源)NullPointer

android - 在为时已晚之前关闭屏幕