0

ボタンのループにOnClickListenerを追加しています。問題は、i変数がfinalである必要があることですが、それでは彼を増やすことができません。

私のコード:

ArrayList<Button> buttonList  = new ArrayList<Button>();
buttonList.add((Button)findViewById(R.id.mov1_btn));
buttonList.add((Button)findViewById(R.id.mov2_btn));
buttonList.add((Button)findViewById(R.id.mov3_btn));
buttonList.add((Button)findViewById(R.id.mov4_btn));
buttonList.add((Button)findViewById(R.id.mov5_btn));
buttonList.add((Button)findViewById(R.id.mov6_btn));

for(int i = 0;i<buttonList.size();i++) 
    {
        buttonList.get(i).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
                    buttonList.get(i).setBackgroundResource(R.drawable.mov1o);  
                    movCnt = i;

                }
            });
    }
4

4 に答える 4

5

iすることはできないので、final別の変数を宣言する必要があります。

for (int i = 0; i < buttonList.size(); i++) {
    final int current = i;  

    buttonList.get(i).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
            buttonList.get(current).setBackgroundResource(R.drawable.mov1o);
            movCnt = current;
        }
    });
}
于 2013-03-18T15:45:31.197 に答える
1

変数iをfinalに設定するのではなく、ビューにタグを設定するだけです。このようにして、値は常にビューにとどまり、必要なときにいつでも使用できます。

for(int i = 0;i<buttonList.size();i++) 
{
    buttonList.setTag(i);
    buttonList.get(i).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
                buttonList.get(i).setBackgroundResource(R.drawable.mov1o);  
                movCnt = (Integer)v.getTag();

            }
        });
}
于 2013-03-18T15:45:46.477 に答える
1
//...
for(int i = 0;i<buttonList.size();i++) 
{
    final int current = i;

    buttonList.get(ii).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
                buttonList.get(current).setBackgroundResource(R.drawable.mov1o);  
                movCnt = current;

            }
        });
}
于 2013-03-18T15:47:10.437 に答える
1

ボタンをiではなくfinalにする必要があります。これは、実行する必要がある例です。

ArrayList<Button> list = new ArrayList<Button>();

        list.add((Button) findViewById(R.id.BTN_login));
        list.add((Button) findViewById(R.id.BTN_login));
        list.add((Button) findViewById(R.id.BTN_login));
        list.add((Button) findViewById(R.id.BTN_login));
        for (int i = 0; i < list.size(); i++)
        {
            final Button tempButton = list.get(i);
            tempButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                     tempButton.setBackgroundResource(R.drawable.mov1n);
                     tempButton.setBackgroundResource(R.drawable.mov1o);  


                }
            });

        }

それが役に立てば幸い。

于 2013-03-18T15:49:35.913 に答える