0

これは私のコードです。作成したトグルボタンで作成したシークバーの位置を100/0に設定したいのですが、最後に作成したトグルボタンでのみ最後のシークバーの位置を設定できます。ボタンとシークバーを作成し、forループを使用してそれらにIDを割り当てました。助けてくれてありがとう。

public class MainActivity extends Activity {

TableLayout tl = null;
SeekBar seekbar = null;
TextView t = null;
ToggleButton bt = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tl = (TableLayout)findViewById(R.id.lightslist);
    t = (TextView)findViewById(R.id.progress);

    for(int i = 1; i <= 20; i++){

         TableRow tr = new TableRow(this);

         seekbar = new SeekBar(this);
         seekbar.setMax(100);
         seekbar.setId(i);
         seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                public void onStopTrackingTouch(SeekBar sb) {
                    // TODO Auto-generated method stub
                    int progress = sb.getProgress();
                    t.setText(sb.getId() + " at " + progress);

                }

                public void onStartTrackingTouch(SeekBar sb) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getBaseContext(), "Start", Toast.LENGTH_SHORT).show();
                }

                public void onProgressChanged(SeekBar sb, int progress, boolean a) {
                    // TODO Auto-generated method stub

                }

            });

            TableRow.LayoutParams ob = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT,
                    1);

            bt = new ToggleButton(this);
            bt.setId(i + 100);

            bt.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {

                    if (bt.isChecked())
                    {
                             seekbar.setProgress(100);
                    }else{
                        seekbar.setProgress(0);
                    }
                }

          });


            tr.addView(bt);

            tr.addView(seekbar, ob);

            tl.addView(tr);

    }

}
4

1 に答える 1

0

forseekbarループで毎回再割り当てされます。したがって、最後に作成されたSeekbarの値は、メンバー変数で最終的に使用可能な値になります。

メンバー変数の代わりに、final変数を作成し、動的に作成されたインスタンスをそれに割り当てることができます。

final SeekBar seekbar = new SeekBar(this);

また

seekbarのタグとしてを設定し、メソッドToggleButtonでタグを取得できます。onClick

        bt = new ToggleButton(this);
        bt.setId(i + 100);
        bt.setTag(seekbar);

        bt.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {

                if (bt.isChecked())
                {
                         SeekBar sb = (SeekBar)getTag();
                         sb.setProgress(100);
                }else{
                    sb.setProgress(0);
                }
            }

      });
于 2013-03-09T16:12:08.020 に答える