Связь между пользовательскими SurfaceView и представлениями по умолчанию для Android

Моя проблема заключается в связи между пользовательским GameView (extends SurfaceView) и TextView: я хочу установить текст TextView изнутри GameView. В основном я использую этот файл макета, он должен объяснить структуру моего приложения:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00ff00" > <TextView android:id="@+id/scoreTV" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="score: 0" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="back" android:layout_alignParentRight="true" /> </RelativeLayout> <org.gk.grApp.GameView android:id="@+id/gameplayScreen" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 

Я не могу изменить текст TextView в моем объекте GameView, потому что невозможно коснуться потока пользовательского интерфейса от другого. Обработчик тоже не работает, потому что я не могу дать ссылку обработчика на конструктор GameView, который выполняется после загрузки этого XML-файла (чтение о конструкторе по умолчанию для xml-файлов, например здесь. Как использовать GLSurfaceView в LinearLayout вместе с другими Представления, такие как TextView или Button? ). Вы хоть представляете, что мне теперь делать? Может быть, мой вывод неверен, поэтому, пожалуйста, расскажите мне об этом.

EDIT: я изменил свой xml-файл, вместо GameView у меня теперь есть:

 <LinearLayout android:id="@+id/gameplayScreen" android:layout_width="fill_parent" android:layout_height="fill_parent" > </LinearLayout> 

Также я добавил аргумент (третий) в подпись конструктора:

 public GameView(Context context, AttributeSet as, Handler h) { ... } 

И изменил мой onCreate в GameplayActivity:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gameplay); LinearLayout ll = (LinearLayout)findViewById(R.id.gameplayScreen); GV = new GameView(this, null, scoreHandler); ll.addView(GV); } 

Он работает, теперь я могу установить текст TextView, но после нажатия на кнопку «Назад» выдается другое исключение: «Выполнение паузы активности, которая не возобновляется: {org.gk.grApp / org.gk.grApp.MainMenuActivity}». Я только начал искать информацию об этом.

Сначала сделайте ссылку на TextView на уровне активности:

TextView txv;

В onCreate назначьте эту ссылку:

Txv = (TextView) findViewById (R.id.MyTextView);

Затем сделайте метод в своей деятельности после onCreate следующим образом:

 public void setTextView(final String txt){ MyActivity.this.runOnUiThread(new Runnable() { public void run() { txv.setText(txt); } }); } 

Затем вы вызываете свой пользовательский вид:

((MyActivity) getContext ()). SetTextView (str);