我给我的布局文件中的每个元素一个ID,并且在我的java类中我有一个名为locate()的方法。我要返回的是:
return findViewById(R.id.star);
但它说无法解析符号findViewById。另外,我不知道应该声明什么作为该方法的返回类型。
所以这是我的代码的样子。
public class Tank {
public int x;
public int y;
public String face;
public Tank(int xPos,int yPos){
x=xPos;
y=yPos;
}
public RETURNTYPE locate(){
return findViewById(R.id.star);
}
}
我不知道返回类型应该是什么,并且findViewById无法解析。我手动创建了这个类(不是自动生成的)。
最佳答案
findViewById
是 View
的方法,也是 Activity 的方法。 ,因此您需要一个 View
或 Activity
的实例来调用它。
现在它可能对您有用,因为您位于 Activity 或 View 内部,但是一旦将其移动到其他位置,您就需要在所述 Activity 或 View 上调用它,即:
View locate(Activity activity) {
return activity.findViewById(R.id.star);
}
View locate(View view) {
return view.findViewById(R.id.star);
}
注意到我正在返回 View
作为返回类型吗?虽然这不是错误的,但它实际上不是最好的,我们可以做得更好。
如果您注意到,finViewById
返回一个扩展 View
的泛型类型。换句话说,一个具体的 View ,因此我们可以重写上面的方法,如下所示:
<T extends View> T locate(Activity activity) {
return activity.findViewById(R.id.star);
}
<T extends View> T locate(View view) {
return view.findViewById(R.id.star);
}
为什么这样更好?因为您不必将其转换到正确的地方。如果没有泛型,您将不得不这样调用它:
TextView t = (TextView) locate();
使用泛型,代码变得更加干净:
TextView t = locate();
PS:不久前,findViewById
实际上返回了 View
,我们都在转换返回类型。如今,Google 已将其更改为泛型,而我们不需要这样做。
关于java - 如何使 Java 类中的方法返回 findViewById?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61379099/