2016-05-15 12 views
0

Ich arbeite an Android und habe an OpenGL ES gearbeitet. Ich eine XML-Layout wie folgt (ich habe einige Dinge nahm nur die Relativ Inhalt zu zeigen.Zugriffstaste von Layout innerhalb von GlSurfaceView

<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"/> 

Da ist in meinem GlSurfaceView ich die Taste für den Zugriff auf versuche, die im gleichen Layout ist jedoch Hier setzt habe ich ein Problem

ich habe versucht, die folgenden:.

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

dieses

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

und dieses

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

Ich kann nicht scheinen, um herauszufinden, wie Sie diese Taste, um außerhalb des GLSurfaceView aber in der gleichen Aktivität in meinem GLSurfaceView.java.

Ich weiß, dass es etwas damit zu tun hat, das Elternteil nicht zu bekommen (ich nehme an, weil es Aktivität nicht verlängert). Ich habe mich umgesehen und finde keinen Weg, dies zu erreichen.

Jede Hilfe wird sehr geschätzt. Danke,

+0

Warum nicht übergeben Sie entweder den 'Context' oder nur die Schaltfläche von der Aktivität zu Ihrer' GLSurfaceView'? Dann musst du nicht durch die Ringe springen, um in der Ansicht darauf zugreifen zu können. –

+0

Können Sie eine Antwort einreichen, wie Sie es weitergeben können und i verwenden, um ID zu erhalten. Also könnte ich es richtig markieren. Das ist eine interessante Idee, an die ich nicht gedacht habe – L1ghtk3ira

Antwort

1

Eine saubere und direkte Möglichkeit, dies zu tun, ist die Schaltfläche Ansicht an die GLSurfaceView übergeben. Abgesehen davon, dass Sie die Navigation durch die Ansichtshierarchie vermeiden, macht dies auch Ihren Ansichtscode generischer, da er die ID einer bestimmten Schaltfläche nicht kennen muss.

Im onCreate() Methode der Tätigkeit, nach setContentView() Aufruf, könnten Sie dies haben:

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

In MyGLSurfaceView:

private TextView mTextView; 

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

Dann in anderen Methoden der MyGLSurfaceView, können Sie mTextView verwenden wann immer Sie Zugriff auf die Schaltfläche benötigen.

+0

Awesome funktioniert großartig, ich wusste nicht, ich könnte Referenzen von UI-Objekten übergeben. Vielen Dank! – L1ghtk3ira