0

我有一个适配器,可以在 gradview 中创建 16 个按钮,因为正在创建按钮,然后我给出一个标签并将其添加到数组中,由于某种原因,当我打印日志时它显示了 17 个元素......任何想法为什么它当我创建 16 个按钮时包含 17 个元素...

public class ButtonAdapter extends BaseAdapter {
    private Context mContext;
    ArrayList<String> colorsArray = new ArrayList<String>(0);// add button tags

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

    public int getCount() {
        int a = 16;// HOW MANY TILES WILL THE ADAPTER DISPLAY AND CREATE IN
                    // THE GRID VIEW, REFRENCED IN THE onCreate METHOD BELOW
        return a;
    }

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

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


    public View getView(int position, View convertView, ViewGroup parent) {
        final Button button;
        if (convertView == null) {
            int r = 1 + (int) (Math.random() * 5);

            button = new Button(mContext);
            button.setLayoutParams(new GridView.LayoutParams(100, 100));
            button.setText("" + r);// set text to random number

            // give each button a new reference number
            int r4 = 1 + (int) (Math.random() * 5);
            int r3 = 1 + (int) (Math.random() * 4);
            int r2 = 1 + (int) (Math.random() * 3);
            int r1 = 1 + (int) (Math.random() * 2);

            // setup attributes for each button
            if (r == 5) {

                button.setBackgroundColor(yellow);
                button.setText("" + r4);// set text to new random number
                colorsArray.add("yellow");
                button.setTag("yellow");


            } else if (r == 4) {

                button.setBackgroundColor(green);
                button.setText("" + r3);
                colorsArray.add("green");
                button.setTag("green");

            } else if (r == 3) {

                button.setBackgroundColor(red);
                button.setText("" + r2);
                colorsArray.add("red");
                button.setTag("red");

            } else if (r == 2) {

                button.setBackgroundColor(blue);
                button.setText("" + r1);
                colorsArray.add("blue");
                button.setTag("blue");

            } else if (r == 1) {

                button.setBackgroundColor(purple);
                colorsArray.add("purple");
                button.setTag("purple");

            } else {

                button.setBackgroundColor(white);
                button.setText("0");

            }

            Log.d(TAG, colorsArray.toString());

        } else {
            button = (Button) convertView;

        }
        return button;
4

1 回答 1

0

我找到了问题的原因:GridView 总是创建 1 个额外的视图,无论所有视图是否可见。

当所有 16 个视图都可见时的示例: 在此处输入图像描述

起初它创建并显示了 16 个视图(最后一个视图是红色的 1)。然后它创建了 1 个永远不会显示的额外视图(视图 17,红色 2)。

我不知道为什么 GridView 会这样做。Android 团队的某个人决定以这种模糊的方式实现此控件。

至于你的适配器,我建议你colorsArray在构造函数中填充你的,不要在其他地方改变它。你会确定它包含不超过 16 个项目。

于 2013-05-03T11:51:43.270 回答