从 GlSurfaceView 中的布局访问按钮

Access button from Layout within GlSurfaceView

我正在研究 Android 并且一直在研究 OpenGL ES。我有一个xml布局如下(为了只显示相关内容,我把一些东西拿出来了:

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  xmlns:ads="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

<TextView
  android:id="@+id/myText"/>

<MyGLSurfaceView
  android:id="@+id/mySurface"/>

然后在我的 GlSurfaceView 中,我试图访问相同布局中的按钮。然而,这是我遇到的问题。

我试过以下方法:

View v = (View) getParent();
myTextViewString = (TextView) v.findViewById(R.id.myText);

这个

myTextViewString = (TextView) findViewById(R.id.myText);

还有这个

myTextViewString = (TextView) ((RelativeLayout) getParent()).findViewById(R.id.myText);

我似乎无法弄清楚如何在 GLSurfaceView 之外访问此按钮,但在我的 GLSurfaceView.java.

中位于相同的 activity

我知道这与无法获得父项有关(我假设是因为它没有扩展 Activity)。我环顾四周,找不到实现此目标的方法。

一种简洁明了的方法是将按钮视图传递给 GLSurfaceView。除了避免在视图层次结构中导航之外,这还使您的视图代码更加通用,因为它不必知道特定按钮的 ID。

在 activity 的 onCreate() 方法中,调用 setContentView() 后,你可以这样:

MyGLSurfaceView glView = (MyGLSurfaceView) findViewById(R.id.mySurface);
TextView textView = (TextView) findViewById(R.id.myText);
glView.setTextView(textView);

MyGLSurfaceView中:

private TextView mTextView;

void setTextView(TextView textView) {
    mTextView = textView;
}

然后,在 MyGLSurfaceView 的其他方法中,您可以随时使用 mTextView 访问按钮。