在我的主要布局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”行时,它会强行关闭。
有什么建议吗?
答案 0 :(得分:4)
您无法从非UI线程修改UI。使用Handler
。或者,在post()
上致电Button
。或者,使用runOnUiThread()
。或者,转储线程并使用AsyncTask
。