Как установить текст на кнопке в Android из цепочки? - PullRequest
0 голосов
/ 03 февраля 2011

В моем основном макете XML у меня есть:

    <LinearLayout android:id="@+id/LinearLayout01" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout android:orientation="vertical" android:gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/LinearLayout02">

<Chronometer android:text="@+id/Chronometer01" android:id="@+id/Chronometer01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Chronometer>


<Button android:text="@string/hints" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/Button01"></Button>

</LinearLayout>
<com.touchpanel.Panel android:id="@+id/SurfaceView01" android:layout_width="wrap_content" android:layout_height="wrap_content">
</com.touchpanel.Panel>

</LinearLayout>

В моем классе Panel я создаю нить для рисования для себя. У меня вопрос, могу ли я получить доступ к кнопке в другом линейном макете, чтобы изменить текст? (Это может произойти совсем немного, текст динамический)

Я попытался объявить кнопку в упражнении, используя этот макет, но не могу получить к ней доступ из класса Panel. Я могу написать функцию, которая принимает текст в качестве параметра для кнопки, но если я вызываю его из класса Panel, он принудительно закрывается. Если я закомментирую "button1.setText (" Текст ");" строка, он прекрасно обрабатывает вызов функции.

Попытка объявить кнопку в классе Panel, например:

private Button b1; //Declared at the beginning of the class

//in constructor of Panel class:
b1 = (Button)findViewById(R.id.Button01);
b1.setText("Hello");

Он объявляет кнопку и прекрасно ее устанавливает. Но когда я пытаюсь использовать строку "b1.setText", она принудительно закрывается.

Есть предложения?

1 Ответ

4 голосов
/ 03 февраля 2011

Вы не можете изменить пользовательский интерфейс из не-пользовательского потока. Используйте Handler. Или позвоните post() на ваш Button. Или используйте runOnUiThread(). Или сбросьте нить и используйте AsyncTask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...