我有一个静态课程:
public static void culculateFprice(){
TextView FinalBuy = (TextView) findViewById(R.id.buyText);
int Pprice = MainActivity.pepperoni.getFinalPrice();
int Cprice = MainActivity.calzone.getFinalPrice();
int QCprice = MainActivity.quattrostagioni.getFinalPrice();
int QFprice = MainActivity.quattroformaggi.getFinalPrice();
int Mprice = MainActivity.mexican.getFinalPrice();
int FinalPrice = Pprice + Cprice + QCprice + QFprice + Mprice;
FinalBuy.setText("Стоимось вашего заказа: " + FinalPrice + " руб.");
}
如何在此类中使用find findViewById? 我从这个方法叫这个方法
public static void onPlus(int i){
ArrayList<String> list = listok();
switch (list.get(i)){
...
}
adapteR.refreshData(listokadd());
culculateFprice();
}
有问题“无法从静态上下文中引用非静态方法“ findViewById(int)””
答案 0 :(得分:0)
我假设您的Activity
类中存在此函数,并且您想基于View
处理一些信息。有两种方法可以解决此问题:
View
引用的字段,该引用将在设置布局后立即创建。因此您的Activity
将保留该字段:
class MyActivity extends Activity {
static View FinalBuy; // needs to be static, otherwise would give same error
}
@Override
void onCreate(Bundle savedInstance) {
// after setLayout
FinalBuy = (TextView) findViewById(R.id.buyText);
}
但是要从潜在的运行时错误中保存代码,请在静态方法中使用if...else
块:
public static void culculateFprice(){
if(FinalBuy != null) {
// your code here.
}
}
此问题是基本Java而不是Android。这就是Java语言被设计用来为程序提供实例与静态方法的方式。
此static View
声明导致潜在的设计缺陷,因为此View
将使Activity失效。取而代之的是,您应该考虑使用列表中建议的方法作为选项1,并查看为什么无法在程序中使用实例方法。您应该阅读this thread的更多信息。
这可能需要您将MainActivity
的其他字段也更改为声明为非静态!