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

标签 java android

我给我的布局文件中的每个元素一个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/

相关文章:

Java3D离屏渲染内存泄漏

java - Java包装器作为守护程序

android - 查找 NavHostFragment Jetpack Navigation Android 时出错

javascript - 在 Android 方向更改时调整 HTML 元素的大小

java - 将 android 项目转换为库项目

android: 基于堆栈的 Activity 返回键机制

java - 设置主框架不可调整大小

java - 内存不足错误: unable to create new native thread

java - 如何将气球提示添加到 JTable 中的单元格,其行为类似于工具提示

java - ArrayList.get(int index) 和 ArrayAdapter.getItem(int position) 方法有什么区别?