给出以下样本:
public class MainActivity extends ActionBarActivity {
int numberOfQuantity=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
TextView quantity = (TextView) findViewById(R.id.quantity_text_view);
public void Increment(View view) {
numberOfQuantity++;
quantity.setText("" + numberOfQuantity);
}
public void Decrement(View view){
numberOfQuantity--;
quantity.setText("" + numberOfQuantity);
}
}
为什么我不能在方法之外使用这行代码:
TextView quantity = (TextView) findViewById(R.id.quantity_text_view);
每当我把它放在递增和递减方法上时,递减就不起作用。
答案 0 :(得分:4)
在对象构造阶段执行放置在方法之外的语句(即,在类本身的声明中)。那时活动还没有绑定到布局,并且没有与之关联的视图。所以,findViewByID()找不到任何东西。你应该只在setContentView()之后调用它,它在onCreate()中调用。
答案 1 :(得分:1)
的setContentView(R.layout.activity_main);正在给你的布局充气。它创建DOM,初始化所有类并分配id等。
一旦布局膨胀,你只能调用View#findViewById()。
在java中,赋值是语句和语句只允许在代码块内(方法,构造函数,静态初始化器等) 只允许声明在这些声明之外。
答案 2 :(得分:1)
关于在方法外调用findViewbyId(),其他答案解释得非常好。
根据您的需要,试试这个
int numberOfQuantity=0;
TextView quantity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
quantity = (TextView) findViewById(R.id.quantity_text_view);
}
public void Increment(View view) {
numberOfQuantity++;
quantity.setText(String.valueOf(numberOfQuantity));
}
public void Decrement(View view){
numberOfQuantity--;
quantity.setText(String.valueOf(numberOfQuantity));
}
}