Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GridView中的最后一个视图随机不更新_Android_Gridview - Fatal编程技术网

Android GridView中的最后一个视图随机不更新

Android GridView中的最后一个视图随机不更新,android,gridview,Android,Gridview,这是一个非常令人困惑的问题,因为它似乎是随机发生的。我有一个GridView,在其中我在onCreate中设置列的大小和数量,然后用从ImageView中的数组中随机选择的绘图填充网格,直到GridView已满。当用户单击其中一个图像视图时,将在视图上设置背景以高亮显示,当用户单击另一个视图时,此高亮显示将被删除。这通常很好,但随着游戏的进行,网格会随着更多视图的添加而重新绘制,问题通常会从网格的第三次重新绘制开始。当用户单击gridView中的最后一个视图时,它将按预期工作,但视图直到第二次单

这是一个非常令人困惑的问题,因为它似乎是随机发生的。我有一个GridView,在其中我在onCreate中设置列的大小和数量,然后用从ImageView中的数组中随机选择的绘图填充网格,直到GridView已满。当用户单击其中一个图像视图时,将在视图上设置背景以高亮显示,当用户单击另一个视图时,此高亮显示将被删除。这通常很好,但随着游戏的进行,网格会随着更多视图的添加而重新绘制,问题通常会从网格的第三次重新绘制开始。当用户单击gridView中的最后一个视图时,它将按预期工作,但视图直到第二次单击后才会更新,第二次单击后,视图将落后于其应位于的位置一步。我还注意到,如果在gridView中单击,而不是在任何视图上单击,这也会使最后一个视图刷新并进入它应该处于的状态

我相信问题出在imageAdapter中,因此代码如下:

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return gridSize;
    }

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

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

    //loop is an int to show how many views have been drawn
    public View getView(int position, View convertView, ViewGroup parent) {
        if (loop == 0){  //remove all views before drawing new grid
            grid.removeAllViewsInLayout();
        } 

        if (loop < gridSize+4){stops the code from rerunning once grid drawn
            if (clover == 1){//if power up active
                randomPosition = rng.nextInt(27);
            }

        else if (clover == 0){
            randomPosition = rng.nextInt(12);
        }
        imageView = new ImageView(mContext);
        imageView.setScaleType(ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(circleS, circleS));
        imageView.setPadding(5, 5, 5, 5);

        imgSet();
        }
        else {
            //do nothing
        }
        return imageView;
    }
    }//end adapter////////
我使用:if loop
有人知道这个愚蠢的GridView和ImageAdapter的替代方案吗?

请确保您正在从主线程或UI线程更新dataset NotifyDataSetChanged,否则无法保证重新绘制


在getView方法中实例化对象不是一个好主意,因为它被多次调用imageView=new ImageViewMcContext;。查看或使用。

您需要发布更多代码。GridView不太可能出现问题,但如何更新网格。。。而且你没有发布任何代码。