我正在设计一个国际象棋棋盘应用程序,我使用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;
}
请帮忙,我是初学者。对不起,请提前感谢。
答案 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();