我有一项活动需要对TableLayout进行各种条件更新(不显示具有'0'值的行,创建新的行项目等等)。我让Dynamic TableLayout运行得非常好,但是你可以想象这种情况的排列会继续增长。我想将各种TableRow管理方法移到一个单独的类中,但是在转换时遇到了问题。
第一个问题是当我尝试从我的主要活动中调用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
}
答案 0 :(得分:1)
第一个问题是我尝试的时候 调用BuildTable.testTable();从我的 它想要方法的主要活动 是静态的
为什么要静态调用此函数?
如果您只想分离某些功能,似乎没有必要实际扩展活动。将它称为非静态可能是一件事,并使用对您的活动的引用,如下所示:(快速打字,没有通过编译器运行它,看看我搞砸了我的语法:P)< / 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
}
答案 1 :(得分: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);
答案 2 :(得分:0)
它要求该方法是静态的,因为您通过其类BuildTable.testTable()调用它;如果你要创建一个BuildTbale类的实例,那么它就不必是静态的。
因此,在您的主要活动中,您会说
BuildTable bt = new BuildTable(); bt.testTable(本); .....
但是,在您的情况下,我认为您只需要创建一个方法而不是新类,除非您要从多个活动中调用它,或者您想要创建同一个类的多个实例。