动态创建的按钮不适用于创建的搜索栏

时间:2013-03-09 16:02:43

标签: android button seekbar

这是我的代码,我希望创建的切换按钮将创建的搜索栏的位置设置为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);

    }

}

1 个答案:

答案 0 :(得分:0)

每次在for循环中都会重新分配seekbar。因此,最后创建的Seekbar的值是成员变量中最终可用的值。

您可以创建最终变量并将动态创建的实例分配给它,而不是成员变量。

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);
                }
            }

      });