2013-03-09 85 views
0

这是我的代码,我希望创建的切换按钮将创建的搜索栏的位置设置为100/0,但只有创建的最后一个切换按钮才能设置最后一个搜索栏的位置。我创建了按钮和seekbar,并使用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); 

    } 

} 

回答

0

您的seekbar每次都在for循环中被重新分配。所以最后创建的Seekbar的值是成员变量中最后可用的值。

不用成员变量,您可以创建一个最终变量并为其分配动态创建的实例。

final SeekBar seekbar = new SeekBar(this); 

OR

你可以设置seekbarToggleButton的标签和检索的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); 
       } 
      } 

     });