如何在线程中设置Android中Button上的文本?

时间:2011-02-02 21:26:10

标签: android button

在我的主要布局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类中,我生成一个线程来为自己做绘图。我的问题是,我可以访问其他线性布局中的Button来更改文本吗? (这会发生很多,文本是动态的)

我尝试使用此布局声明活动中的按钮,但我无法从Panel类访问它。我可以编写一个函数,将文本作为参数放入按钮,但是如果我从Panel类调用它,它会强制关闭。如果我注释掉“button1.setText(”Text“);” line,它处理函数调用很好。

尝试在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 个答案:

答案 0 :(得分:4)

您无法从非UI线程修改UI。使用Handler。或者,在post()上致电Button。或者,使用runOnUiThread()。或者,转储线程并使用AsyncTask