-2

onClickListener内で物事がどのように機能するかを理解したことがないので、これを手伝ってください:

私自身のクラスを手に入れました:

public class ItemFrame extends LinearLayout{

     int item_id;

     public ItemFrame(Context context){
        super(context);
     }

     public int getItem_id() {
        return item_id;
     }

    public void setItem_id(int item_id) {
        this.item_id = item_id;
     }
}

1 つを初期化し、onClickListener を追加します。

ItemFrame myItemFrame = new ItemFrame(this);

myItemFrame.setOnClickListener(new OnClickListener(){
                public void onClick(View v){

                                   //ERROR HERE:
                                   //Cannot refer to a non-final variable myItemFrame inside an inner class 
                                   //defined in a different method
                                   //Quick fix: Change modifier of 'myItemFrame' to final.
                    myItemFrame.setItemId(100);
                }


            });

だから...私の質問は、onClickListener内でクラスのデータタグを設定するにはどうすればよいですか??? Eclipse が言うように final に変更すると、 final であるため変更できませ。意味がありますか?

4

2 に答える 2

1

作成した OnClickListener は匿名の内部クラスであり、最終値のみを参照できます。

変更するだけです:

ItemFrame myItemFrame = new ItemFrame(this);

することが:

final ItemFrame myItemFrame = new ItemFrame(this);

作成した ItemFrame オブジェクトは引き続き変更できます。新しいものを myItemFrame 変数に再割り当てすることはできません。

于 2012-05-27T13:32:44.030 に答える
1

コードを実装する別の方法があります。それを見てください。

public class ItemFrame extends LinearLayout implements OnClickListener
{
     int item_id;

     public ItemFrame(Context context)
     {
        super(context);
     }

     public int getItem_id() 
     {
        return item_id;
     }

    public void setItem_id(int item_id) 
    {
        this.item_id = item_id;
    }

    public void onClick(View v)
    {
       setItemId(100);
    }
}
于 2012-05-27T13:33:49.120 に答える