我在 Android 中遇到以下错误:
CalledFromWrongThreadException;:只有创建视图层次结构的原始线程才能接触其视图
当我尝试在我的 Activity 中更新 Textview 时似乎会发生这种情况,更新 TextView 的调用来自我的 Activity,但我仍然收到上述错误。
我有这样的:
onCreate() - 设置按钮和文本视图。
onStateChange() - 状态更改通知的侦听器,如果更改 TextView 以说出一些不同的文本,则会收到通知。
当我收到新文本的通知时,我尝试将 TextView 更改为:
((TextView)findViewById(R.id.title)).setText("Some Text");
但我得到了上述错误。
通过谷歌搜索,看来我应该使用处理程序来更改 TextView 或者使用 AsyncTask?
谁能解释哪一个更好用,为什么?
编辑:添加代码片段:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.my);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
((TextView)findViewById(R.id.time)).setText("Hello Text");
findViewById(R.id.keyboardimage).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"));
startActivity(dialIntent);
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.FLAG_SOFT_KEYBOARD));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
});
}
//CallBacks from running Service
private final ICallDialogActivity.Stub iCallDialogActivity = new ICallDialogActivity.Stub(){
@Override
public void onStateChanged(int callState)
throws RemoteException {
switch(callState){
case GlobalData.CALL_STATUS_IDLE:
break;
case GlobalData.CALL_STATUS_DISCONNECTING:
byeSetup();
break;
}
};
public void byeSetup(){
((TextView)findViewById(R.id.time)).setText("Bye Text");
findViewById(R.id.keyboardimage).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Void the Button
}});
}