2013-04-11 98 views
-3

任何人都可以帮我吗?复选框不能动态创建。就像有时我使用程序创建6复选框。有时我会创建8个复选框。我想设置每个复选框一个事件,以检查它被检查的时间。以下面的方式,我得到一个错误:不能引用一个非最终变量我在一个不同的方法中定义的内部类中。更改“i “到最后。 mCheckTime是一个很长的阵列。复选框不能动态创建

 for(int i=0;i<optionsNum;i++){ 
      mCheckBox[i]=new CheckBox(this); 
      mCheckBox[i].setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){ 
       public void onCheckedChanged(CompoundButton buttonView, boolean isCheck){ 
        if (mCheckBox[i].isChecked()) { 
         mCheckTime[i] = System.currentTimeMillis(); 
        } 
       } 
      }; 
+0

无法创建方法,执行上面的代码时发生了什么.. ..? – Pragnani 2013-04-11 15:30:32

+0

你到底有什么问题? – Karakuri 2013-04-11 15:30:45

+0

在上面的代码之后,你用'mCheckBox'做了什么? – 2013-04-11 15:30:57

回答

2

,如果你的内容画面的LinearLayout,尝试

final CheckBox mCheckBox = new CheckBox(this); 
    mCheckBox 
      .setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { 
       public void onCheckedChanged(CompoundButton buttonView, 
         boolean isCheck) { 
        if (mCheckBox.isChecked()) { 
         mCheckBox.setText(System.currentTimeMillis() + ""); 
        } 
       } 
      }); 
    LayoutParams params = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 
    addContentView(mCheckBox, params); 

======编辑======

或试试这个

LinearLayout layout = new LinearLayout(this); 
    layout.setOrientation(LinearLayout.VERTICAL); 
    setContentView(layout); 
    CheckBox[] mCheckBox = new CheckBox[6]; 
    for (int i = 0; i < 6; i++) { 
     mCheckBox[i] = new CheckBox(this); 
     mCheckBox[i].setText(i + ""); 
     mCheckBox[i] 
       .setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { 
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isCheck) { 
         if (isCheck) { 
          Toast.makeText(MainActivity.this, 
            System.currentTimeMillis() + "", 
            Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 
     layout.addView(mCheckBox[i]); 
    } 
+0

是的,他已经添加复选框到他的布局.. + 1 – Pragnani 2013-04-11 15:44:40

+0

谢谢。我知道了。 – unique 2013-04-12 09:27:05

+0

请解决你的问题:-) – Celtic 2013-04-12 10:43:35

0

非常感谢。我使用最后一个变量j来替换内部类中的我。

for(int i=0;i<optionsNum;i++){ 
     final int j = i; 
     mCheckBox[i]=new CheckBox(this); 
     mCheckBox[i].setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){ 
      public void onCheckedChanged(CompoundButton buttonView, boolean isCheck){ 
       if (mCheckBox[i].isChecked()) { 
        mCheckTime[i] = System.currentTimeMillis(); 
       } 
      } 
     };