我有这样的的onCreate:Android如何使用公共静态方法在TextView中设置文本?
final TextView text1 = (TextView) findViewById(R.id.txtNextAlarm);
我试图在处于同一类中的方法来设置文本:
public static void NextTxt(){
text1.setText("");
}
但它不承认“的text1 ”。
我有这样的的onCreate:Android如何使用公共静态方法在TextView中设置文本?
final TextView text1 = (TextView) findViewById(R.id.txtNextAlarm);
我试图在处于同一类中的方法来设置文本:
public static void NextTxt(){
text1.setText("");
}
但它不承认“的text1 ”。
的问题是,静态方法不与任何特定对象相关,但与整个类相关。因此,他们只能看到班上的静态字段。你的text1
变量甚至不是这样,如果你说的是真的。相反,它是一个只存在于onCreate()
方法长度的局部变量。如果你知道你永远只能有你活动的一个实例(而这可能不是一个不合理的假设),你可以做的是使用
private static TextView text1;
在类的顶部(或基本上以外的任何地方的方法)。 final
修饰符不会为你购买任何东西。您选择是公开还是私人,但我倾向于私下默认(除非有其他原因)。
另一种方法是问自己为什么NextTxt()
是静态的;如果您将其设为普通实例方法,那么您仍然需要在类中声明text1
,但它不需要是静态的。但是,你需要一个实例来调用它。
我需要在另一个类中使用NextTxt()方法,这就是为什么我需要将其设置为静态?我发现每个人都对静态方法和变量持怀疑态度,如果我需要在另一个类中使用方法,这是正确的方法吗? – user1880779 2013-02-22 22:11:18
您节省了我的时间 – Thamaraiselvam 2016-01-18 19:19:24
在静态字段中放置Android上下文类(EditText,TextView e.t.c)是一个坏主意,因为它们将应用程序暴露于内存泄漏而令人不悦。 – 2016-11-02 08:01:08
TextView text1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
text1 = (TextView) findViewById(R.id.txtNextAlarm);
}
在onCreate方法中进行初始化。
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("");
}
如果该方法是静态的,则不能访问该类的任何非静态字段。你必须让你的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("");
}
当然,你只能有一个文本框设置的时候,因为它是类的静态字段。其他选项包括从NextTxt方法中创建单例或删除静态修饰符。
如果这是真的,这条线是在onCreate方法
final TextView text1 = (TextView) findViewById(R.id.txtNextAlarm);
再回答你的问题是,text1为出scope从NextTxt方法中。你已经在一个方法中声明并初始化了一个变量,并且你试图从另一个方法访问它。为了使NextTxt方法“看到”text1,您需要将该成员移动到两个方法均可访问它的位置。
正如其他答案中所提到的,您也正在处理的事实是,onCreate是一个实例方法,而NextTxt是一个静态方法。为了“解决”你的问题,你可能会试图让所有事情都变成静态的,但这是一条危险且渺茫的路径。您无法控制Android杀死您的用户界面的时间,因此text1可能会在无警告的情况下失效。下一次尝试调用其上的方法时,您不会喜欢结果。
重新思考你正在尝试做什么,如果需要的话将其绘制出来,如果你不明白错误,就不要在Eclipse中应用快速修复。
我需要在另一个类中使用NextTxt()方法,这就是为什么我需要将其设置为静态。我看到每个人都对静态方法和变量持怀疑态度。那么如果我需要在另一个类中使用一个方法,那么这样做的正确方法是什么? – user1880779 2013-02-22 22:12:03
为什么'NextTxt'需要是静态的? – Simon 2013-02-20 22:44:25
@Simon我需要从另一个类中使用该方法 – user1880779 2013-02-20 22:56:29
*如果*(且仅限于)该类在您的Activity中实例化并且可以*保证*该类的生命周期不大于该Activity,则将一个引用传递给TextView转换为其他类。如果你无法保证一生的话,那么你就会冒着严重的内存泄漏的风险,所以回过头来问一下回调。 – Simon 2013-02-20 23:06:30