gpt4 book ai didi

java - 如何使 Java 类中的方法返回 findViewById?

转载 作者:行者123 更新时间:2023-12-02 08:41:15 25 4
gpt4 key购买 nike

我给我的布局文件中的每个元素一个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无法解析。我手动创建了这个类(不是自动生成的)。

最佳答案

findViewByIdView 的方法,也是 Activity 的方法。 ,因此您需要一个 ViewActivity 的实例来调用它。

现在它可能对您有用,因为您位于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com