GridView中的按钮没有得到正确的ID

时间:2018-01-30 12:15:06

标签: java android gridview

我正在设计一个国际象棋棋盘应用程序,我使用gridview存储64个按钮并从0到63分配id。但是id从2开始而不是0,我不明白为什么这是发生。

我正在使用我制作的ButtonAdapter类,以下是它的getView()方法,我将每个按钮的文本设置为与其id相同,以确保它们获得正确的ID。

@Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        Button button;

        if(view == null){
            button = new Button(mContext);
        }else{
            button = (Button)view;
        }

        button.setId(mIndex);
        button.setText(button.getId()+"");
        button.setTextSize(5);
        button.setPadding(0,0,0,0);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mContext, view.getId()+"", Toast.LENGTH_SHORT).show();
            }

        });
        mIndex++;
        return button;
    }

mIndex在我的构造函数中初始化为0,如下面的

private Context mContext;
private int mIndex;
public ButtonAdapter(Context context){
        mContext = context;
        mIndex = 0;
    }

我得到的结果截图如下 enter image description here

请帮忙,我是初学者。对不起,请提前感谢。

2 个答案:

答案 0 :(得分:1)

请勿使用mIndex变量并增加,因为当您滚动时会产生问题。

您可以使用适配器位置而不是mIndex

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            Button button;
            if(view == null){
                button = new Button(mContext);
            }else{
                button = (Button)view;
            }

            button.setId(i);
            button.setText(String.valueOf(i));
            button.setTextSize(5);
            button.setPadding(0,0,0,0);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(mContext, view.getId()+"", Toast.LENGTH_SHORT).show();
                }

            });
            return button;
        }

答案 1 :(得分:0)

你可以像这样设置标签

button.setTag(Integer.valueOf(position)); 

并通过

获取该ID
 Integer position = (Integer)view.getTag();