我有一个GridView按钮,我需要更改背景并点击某个按钮,它适用于所有人,但不适用于第一个:
public View getView(int position, View convertView, ViewGroup parent ) {
Button btn;
if (convertView == null) {
btn = new Button(mContext);
btn.setLayoutParams(new GridView.LayoutParams(44,44));
btn.setPadding(0,0,0,0);
}
else {
btn = (Button) convertView;
}
btn.setId(position);
bottoni[position] = btn;
//abilito o disabilito caselle
if (mossa == 1){
btn.setBackgroundColor(Color.parseColor("#C85A17"));
btn.setClickable(true);
}
else {
if (statobtn[position] == "A") {
btn.setBackground(getResources().getDrawable(R.drawable.semi));
btn.setClickable(true); }
if (testobtn[position] != "") {
btn.setBackground(getResources().getDrawable(R.drawable.fiorebianco));
btn.setClickable(false); }
}
btn.setOnClickListener(new MyOnClickListener(position,btn));
return btn;
}
任何想法?
我首先启动100个按钮,首先我需要启用一些与点击按钮相关的按钮,但第一个按钮总是耗尽......
答案 0 :(得分:2)
当我将视图保留在视图持有者中时,我遇到了同样的问题。 为了解决这个问题,我尝试在case position = 0的情况下创建新视图,它可以工作。
在您的代码中,更改
if (convertView == null)
到
if (convertView == null || position == 0) {
答案 1 :(得分:1)
我遇到了完全相同的问题并通过删除/修改GridView.LayoutParams修复了它。
尝试注释掉以下代码:
btn.setLayoutParams(new GridView.LayoutParams(44,44));
答案 2 :(得分:0)
GridView可能会调用getView作为位置0,因此它会有很多位置为0的Button。但是,最后一个可能不是屏幕上的那个,所以你可能会更改错误的按钮。
如何解决?
您可以为每个Button指定标签,然后通过GridView.findViewByTag()在屏幕上找到正确的按钮。