GridView第一项不起作用

时间:2013-07-16 14:18:58

标签: android gridview

我有一个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个按钮,首先我需要启用一些与点击按钮相关的按钮,但第一个按钮总是耗尽......

3 个答案:

答案 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()在屏幕上找到正确的按钮。