2011-02-13 57 views
0

我有一个活动需要对TableLayout进行各种条件更新(做/不显示具有'0'值的行,创建新的行项目...等)。我有Dynamic TableLayout工作得非常好,但你可以想象这种排列继续增长。我想将各种TableRow管理方法移到一个单独的类中,但在转换时遇到问题。将动态TableLayout方法移动到单独的类

第一个问题是,当我尝试从我的主要活动调用BuildTable.testTable();时,它希望方法是静态的。这是有道理的,但是当我将testTable设置为静态时,那么我得到的抱怨是“不能从类型Activity对静态方法findViewById(int)进行静态引用”。当我遵循here的建议时,似乎我非常接近解决方案,但它并没有完全融合在一起。我需要帮助......并真诚地感谢你能提供的任何事情。

我已经熬下来的基础之下,只有一个单一的TextView插入...我有:

public class BuildTable extends Activity { 

public void testTable() { 
    TableLayout tl = (TableLayout)findViewById(R.id.InvoiceTable); // Find TableLayout defined in main.xml 
     TableRow trDivider = new TableRow(getParent()); 
      TextView tvDivider = new TextView(getParent()); //Create a divider view between rows 
      tvDivider.setText("test"); 
     trDivider.addView(tvDivider); //Add tvDivider to the new row 
    tl.addView(trDivider); //Add trDivider to the TableLayout 
} 

回答

1

如果你真的想要一个static方法来做到这一点,只需将你的Activity传入方法调用。

public class BuildTable { 

    private BuildTable(){ 
     // private as no need to create an instance 
    } 

    public static void testTable(Activity contextActivity) { 
     TableLayout tl = (TableLayout) contextActivity.findViewById(R.id.InvoiceTable); // Find TableLayout defined in main.xml 
     // etc 
    } 
} 

然后在您的Activity使用:

BuildTable.testTable(this); 
+0

我对这个社区的帮助感到震惊和谦卑。谢谢你们。我读过的每一个答案都能起作用,并且他们都给了我指导我需要做出的改变。我选择了这个答案,因为它的工作如此之快,只需很少的努力。谢谢! – ctgScott 2011-02-13 19:38:07

1

的第一个问题是,当我试图 呼叫BuildTable.testTable();从我 主要活动就是了方法 是静态

你为什么要静态调用这个函数?

如果您只是想分离某些功能,似乎没有必要实际扩展活动。将它称为非静态的,并使用对你的活动的引用可能是一件事情,就像这样:(快速输入,没有通过编译器运行它来查看我的语法混乱的位置:P)

public class BuildTable { //doesn't need activity 
private Activity contextActivity; //here is your activity 


public BuildTable(Activity yourContext){  //build a constructor 
    contextActivity = yourContext; 
} 

public void testTable() { 
    TableLayout tl = (TableLayout)contextActivity.findViewById(R.id.InvoiceTable); 
     TableRow trDivider = new TableRow(getParent()); 
      TextView tvDivider = new TextView(getParent()); 
      tvDivider.setText("test"); 
     trDivider.addView(tvDivider); //Add tvDivider to the new row 
    tl.addView(trDivider); //Add trDivider to the TableLayout 
} 
+0

你是对的...我真的不希望/需要它作为静态的。那恰好是在我有时用“纠正错误”的方法进行纠正时首先出现的错误。我要重建这个。 – ctgScott 2011-02-13 19:40:57

0

它要求该方法是静态的,因为您是通过它的类BuildTable.testTable()来调用它。如果你想创建一个BuildTbale类的实例,那么它不一定是静态的。

因此,在您的主要活动,你会说

BuildTable BT =新BuildTable(); bt.testTable(this); .....

然而,在你的情况下,我认为你只需要创建一个方法不是一个新的类,除非你打算从多个活动或你调用它想要创建同一个类的多个实例。

+0

谢谢。你说得对,我不需要另外一堂课。我只是试图做什么看起来是家务。感谢您提供有关班级电话的提醒......这非常有帮助。 – ctgScott 2011-02-13 19:45:27