我在 onCreate 有这个:
final TextView text1 = (TextView) findViewById(R.id.txtNextAlarm);
我正在尝试在同一类中的方法中设置文本:
public static void NextTxt(){
text1.setText("");
}
但它不识别“text1”。
问题是静态方法不与任何特定对象相关联,而是与整个类相关联。因此,他们只能看到您班级中的静态字段。text1
如果你说的是真的,你的变量甚至不是那个。相反,它是一个局部变量,只存在于onCreate()
方法的长度。如果您知道您的活动只会有一个实例(这可能不是一个不合理的假设),那么您可以做的是使用
private static TextView text1;
在你的类的顶部(或者,基本上,在方法之外的任何地方)。final
修饰符不会给你带来任何东西。您可以选择将其设为公开还是私有,但默认情况下我倾向于私有(除非有其他原因)。
另一种方法是问自己为什么NextTxt()
是静态的;如果你让它成为一个普通的实例方法,那么你仍然需要text1
在类中声明,但它不需要是静态的。但是你需要一个实例来调用它。
TextView text1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
text1 = (TextView) findViewById(R.id.txtNextAlarm);
}
在 onCreate 方法中进行初始化。
如果方法是静态的,则不能访问该类的任何非静态字段。您必须将 textField 设为静态或将其作为参数传递。
static TextView text1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyClass.text1 = (TextView) findViewById(R.id.txtNextAlarm);
}
public static void NextTxt(){
MyClass.text1.setText("");
}
当然你一次只能设置一个 textField,因为它是类的静态字段。其他选项包括制作单例或从 NextTxt 方法中删除静态修饰符。
如果这条线在你的 onCreate 方法中是真的
final TextView text1 = (TextView) findViewById(R.id.txtNextAlarm);
那么问题的答案是 text1 超出了NextTxt 方法的范围。您已经在一个方法中声明并初始化了一个变量,并且您正试图从另一个方法访问它。为了让 NextTxt 方法“看到”text1,您需要将该成员移动到两个方法都可以访问它的位置。
正如其他答案中提到的,您还要处理 onCreate 是一个实例方法而 NextTxt 是一个静态方法的事实。您可能很想开始将所有内容都设置为静态以“解决”您的问题,但这是一条危险且草率的道路。您无法控制 Android 何时终止您的 UI,因此 text1 可能会在没有警告的情况下变为无效。下次您尝试对其调用方法时,您将不喜欢结果。
重新考虑您正在尝试做的事情,如有必要,将其勾画出来,如果您不理解错误,请不要只在 Eclipse 中应用快速修复。
text1 是一个local
变量,您必须将其声明为类的属性
public final TextView text1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
text1 = (TextView) findViewById(R.id.txtNextAlarm);
}
并在您的静态方法中使用:
public static void NextTxt(){
text1.setText("");
}