我试图更好地理解声明和初始化,但我并不真正理解为什么您无法在OnClick中更改Button的文本,尽管它无法访问OnCreate,因为它具有另一个功能。
当还在onCreate中声明变量时,它不起作用,而只有初始化起作用。请解释原因。谢谢
package com.example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.Button);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
btn.setText("Sample Text");
}
}
因此,我试图理解为什么您可以更改Button的文本,即使尚未在OnClick中对其进行初始化。非常感谢<3
答案 0 :(得分:0)
它已被初始化。看到变量btn吗?它在类级别,而不是在函数内部。这意味着该变量存储在该类的实例中,而不是存储在堆栈中,并且将在对该类的同一实例的函数调用之间保持不变。由于将在与onCreate相同的实例上调用onClick,因此在onCreate中对其进行初始化时,它将保持初始化状态。因此,在调用onClick时,该值已经设置。
答案 1 :(得分:0)
您有一个ValueError: could not convert string to float: '0.004f'
Button
,目前为空,因此您无能为力。
在(Button btn;)
内部,您的按钮已初始化(onCreate
),现在您可以为其分配点击
与您一样的监听器-btn = (Button)findViewById(R.id.Button);
btn.setOnClickListener(this);
的意思是-单击此按钮时称为setOnClickListener
方法。
在onClick
内,您可以更改文本。
因此,我试图理解为什么即使尚未在OnClick中初始化Button的文本,也可以更改它的原因。
您的onClick
在类级别是 作为全局变量 ,这意味着您可以从类内部的方法btn
访问它会被调用的第一件事(这就是为什么您要初始化按钮哦)
然后初始化按钮,然后可以更改按钮文本。