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

ビューホルダーにビューを保持すると、同じ問題が発生します。これを解決するために、position = 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 に対して多くのボタンがあります。ただし、最後のボタンは画面上のボタンではない可能性があるため、間違ったボタンを変更している可能性があります。

それを解決する方法は?

すべてのボタンにタグを付けてから、GridView.findViewByTag() を使用して画面上の適切なボタンを見つけることができます。

于 2016-03-03T17:24:39.767 に答える