Android:快速滚动时 Gridview 变为空白

标签 android android-layout android-gridview

如果我滚动得非常快,Android 中的 GridView 会变成空白

请给我一个解决方案..

提前致谢..

这是我的代码

gridView.setAdapter(new ImageAdapter(ChangedDashboard.this, stringarray));

这是我在 gridview 上设置的适配器类

public class ImageAdapter extends BaseAdapter {
private Context context;
private final String[] menuvalues;

public ImageAdapter(Context context, String[] menuValues) {
    this.context = context;
    this.menuvalues = menuValues;
}
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from mobile.xml
        gridView = inflater.inflate(R.layout.changedashboard, null);

    } else {
        gridView = (View) convertView;
    }

    TextView textView = (TextView) gridView
    .findViewById(R.id.textView1);
    textView.setText(menuvalues[position]);

    // set image based on selected text
    ImageView imageView = (ImageView) gridView
    .findViewById(R.id.imageView1);

    String mobile = menuvalues[position];

    if (mobile.equals("1")) {
        imageView.setImageResource(R.drawable.new1);
    } else if (mobile.equals("2")) {
        imageView.setImageResource(R.drawable.new2);
    } else if (mobile.equals("3")) {
        imageView.setImageResource(R.drawable.new3);
    }else if (mobile.equals("4")) {
        imageView.setImageResource(R.drawable.new4);
    } else if (mobile.equals("5")) {
        imageView.setImageResource(R.drawable.new5);
    }else if (mobile.equals("6")) {
        imageView.setImageResource(R.drawable.new6);
    } 

    return gridView;
}

public int getCount() {
    return menuvalues.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

请给我解决方案

更新代码

public class ImageAdapter extends BaseAdapter {
private Context context;
private final String[] menuvalues;

public ImageAdapter(Context context, String[] menuValues) {
    this.context = context;
    this.menuvalues = menuValues;
}
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from mobile.xml
        gridView = inflater.inflate(R.layout.changedashboard, null);
        ViewHolder holder = new ViewHolder();
        holder.textView = (TextView) gridView
                .findViewById(R.id.textView1);
        holder.imageView = (ImageView) gridView
                .findViewById(R.id.imageView1);
        gridView.setTag(holder);

    } else {
        gridView = (View) convertView;
    }

    /*TextView textView = (TextView) gridView
    .findViewById(R.id.textView1);*/


    // set image based on selected text
    /*ImageView imageView = (ImageView) gridView
    .findViewById(R.id.imageView1);*/

    String mobile = menuvalues[position];

    ViewHolder holder = (ViewHolder)gridView.getTag();
    holder.textView.setText(mobile);
    if (mobile.equals("1")) {
        holder.imageView.setImageResource(R.drawable.new1);
    } else if (mobile.equals("2")) {
        holder.imageView.setImageResource(R.drawable.new2);
    } else if (mobile.equals("3")) {
        holder.imageView.setImageResource(R.drawable.new3);
    }else if (mobile.equals("4")) {
        holder.imageView.setImageResource(R.drawable.new4);
    } else if (mobile.equals("5")) {
        holder.imageView.setImageResource(R.drawable.new5);
    }

    return gridView;
}

public int getCount() {
    return menuvalues.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}
public static class ViewHolder {
    TextView textView;
    ImageView imageView;
}

最佳答案

用户 ViewHolder 重用 View 的方法。因为,每次滚动时,您都会通过 id 查找 View ,这需要一些处理并可能导致非常小的延迟,导致 GridView 闪烁。

这里有一些有用的链接,可以让您了解 ViewHolder。

  1. why does the ViewHolder pattren work?
  2. ViewHolder pattern: caching effectively
  3. Commonsware:AdapterViews and Adapters具体参见 ViewHolder 部分。

关于Android:快速滚动时 Gridview 变为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14052959/

相关文章:

java - 在Android中绘制wav音频的波形

android - 无法接受许可协议(protocol) Android SDK Platform 24

android-layout - 以编程方式从android中的 ImageView 中删除背景图片

android - 如何在 Android 中创建电视指南 View

android - 清除 GridView 并在 android 中重新生成它

android - PopupWindow 的宽度/样式问题

android - 使用 viewpager AsyncTask 启动应用程序并加载数据

android - 如何在同一列表项中同时显示字符串和编辑文本字段?

android - 如何在工具栏下方创建一个 TabLayout 位置?

android - 动画 android Gridview 项目