2015-12-15 18 views
0

这是一个示例try代码。我使用循环在表格行中添加了复选框和textview。一切工作正常,除了每当我试图从另一种方法取出(复选框,Textview),我无法得到它。我不知道如何解决这个问题。我尝试了setId,但我无法获得Id。从编程视图获取Id

protected void onCreate(Bundle savedInstanceState) { 
    TableLayout tl = (TableLayout)findViewById(R.id.tableLayout1); 
    TableRow[] row = new TableRow[5]; 
    TextView tv[] = new TextView[5]; 
    CheckBox[] cb = new CheckBox[5]; 
    Button clickTestRow; 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    for(int j = 0; j < 5; j ++){ 
     row[j] = new TableRow(this); 
     tl.addView(row[j]); 
     tv[j] = new TextView(this); 
     cb[j] = new CheckBox(this); 

     tv[j].setText("This is text"); 

     row[j].addView(cb[j]); 
     row[j].addView(tv[j]); 

     if(j == 0) 
      cb[j].setChecked(true); 

    } 

    clickTestRow = (Button) findViewById(R.id.clickTestRow); 

    clickTestRow.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
    TableLayout tlid = (TableLayout) findViewById(R.id.tableLayout1); 
      for(int i = 0; i < 5; i ++){ 
       if(cb[i].isChecked()){ 
        tlid.removeView(row[i]); 
       } 
      } 
     } 
    }); 
+0

您应该将'TableLayout tl'移动到您班级顶部的字段中。然后你可以在你的onClickListener中使用这个变量。 –

+0

如果我将它移动到顶部,那么我将得到NPE,我不知道为什么,但是这种方式似乎解决了这个问题。 – user3900009

+0

您仍然需要执行'tl =(TableLayout)findViewById(R.id.tableLayout1);'。 –

回答

0

这是未经测试的,但现在就试试这个。

要点这里有

  1. 字段为您的观点
  2. 呼叫setContentView使用findViewById
  3. final变量,对于那些你想一个匿名类中使用之前(在onClickListener)

public class MainActivity extends Activity { 

    private TableLayout tl; 
    private Button clickTestRow; 

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

     tl = (TableLayout)findViewById(R.id.tableLayout1); 
     clickTestRow = (Button) findViewById(R.id.clickTestRow); 

     final TableRow[] row = new TableRow[5]; 
     final TextView tv[] = new TextView[5]; 
     final CheckBox[] cb = new CheckBox[5]; 

     for(int j = 0; j < 5; j ++){ 
      row[j] = new TableRow(this); 
      tl.addView(row[j]); 
      tv[j] = new TextView(this); 
      cb[j] = new CheckBox(this); 

      tv[j].setText("This is text"); 

      row[j].addView(cb[j]); 
      row[j].addView(tv[j]); 
     } 
     cb[0].setChecked(true); 

     clickTestRow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       for(int i = 0; i < 5; i ++){ 
        if(cb[i].isChecked()){ 
         tl.removeView(row[i]); 
        } 
       } 
      } 
     }); 
    } 
} 
+0

现在,我明白你的意思了。那么通过添加最终解决所有问题? – user3900009

+0

在这种情况下,是的。你也可以将这些数组移到字段中,这样可以达到同样的目标。 –

+0

非常感谢。我很难找到获得Id的方法 – user3900009