在Android

时间:2016-03-19 08:08:49

标签: android

给出以下样本:

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);

每当我把它放在递增和递减方法上时,递减就不起作用。

3 个答案:

答案 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));
}
}