3

我有一个按钮的 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 个按钮,我只需要启用与单击的按钮相关的一些按钮,但第一个按钮始终启用...

4

3 回答 3

2

当我将视图保留在视图持有者中时,我遇到了同样的问题。为了解决这个问题,我尝试在位置 = 0 的情况下创建新视图,它可以工作。

在您的代码中,更改

if (convertView == null)

if (convertView == null || position == 0) {

于 2016-09-19T02:17:09.987 回答
1

我遇到了完全相同的问题,并通过删除/修改 GridView.LayoutParams 来修复它。

尝试注释掉以下代码:

btn.setLayoutParams(new GridView.LayoutParams(44,44));
于 2014-01-17T09:56:30.317 回答
0

GridView 可能会为位置 0 调用 getView,因此位置 0 会有很多 Button。但是,最后一个可能不是屏幕上的那个,所以你可能会更改错误的 Button。

如何解决?

你可以给每个Button打标签,然后通过GridView.findViewByTag()在屏幕上找到合适的Button。

于 2016-03-03T17:24:39.767 回答