Android,适配器为阵列添加额外的元素?

时间:2013-05-02 10:33:26

标签: java android

我有一个适配器,可以在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;

1 个答案:

答案 0 :(得分:0)

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

当所有16个视图都可见时的示例: enter image description here

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

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

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