从线程更新TextView中的文本

时间:2016-03-01 06:20:07

标签: android

我已向TextView添加RelativeLayout,我已添加了SurfaceView。我可以让TextViewSurfaceView上显示文字。

rl = new RelativeLayout(this);
tv = new TextView(this);
tv.setText(Integer.toString(GameScreen.score));
tv.setTextSize(50);
tv.setPadding(390, 50, 0, 0);
tv.setTextColor(Color.BLACK);
rl.addView(renderView);
rl.addView(tv);
setContentView(rl);

然后在我的GameScreen类的更新方法中,我把:

game.getTextView().setText(Integer.toString(score));

它给了我错误:

  

android.view.ViewRootImpl $ CalledFromWrongThreadException:只有   创建视图层次结构的原始线程可以触及其视图。

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:2)

使用以下建议的方式更新UIFont *helMedium = [UIFont fontWithName:@"HelveticaNeue-Medium" size:12.0]; NSDictionary *mediumDict = [NSDictionary dictionaryWithObject: helMedium forKey:NSFontAttributeName]; NSMutableAttributedString *mAttrString = [[NSMutableAttributedString alloc] initWithString:@"Year :" attributes: mediumDict]; UIFont *helNormal = [UIFont fontWithName:@"HelveticaNeue" size:12.0]; NSDictionary *normalDict = [NSDictionary dictionaryWithObject: helNormal forKey:NSFontAttributeName]; NSMutableAttributedString *nAttrString = [[NSMutableAttributedString alloc] initWithString:@"2016" attributes: normalDict];

上的Widget
UiThread

希望这有帮助。

答案 1 :(得分:1)

在UI线程中运行您的代码。您无法从工作线程执行UI操作。

your_context.runOnUiThread(new Runnable() {
    public void run(){   
        game.getTextView().setText(Integer.toString(score));
    }
});

答案 2 :(得分:1)

使用此代码。确定它会帮助你!

private void runThread() {

    new Thread() {
        public void run() {

                try {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                           game.getTextView().setText(Integer.toString(score));
                        }
                    });

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

        }
    }.start();

让我知道它是否有效! :)