【问题标题】:Android: Only the original thread that created a view hierarchy can touch its viewsAndroid:只有创建视图层次结构的原始线程才能触摸其视图
【发布时间】:2016-01-17 02:11:03
【问题描述】:

当我在下面的代码中调用listenButton.setAlpha((float)1) 时,我收到错误“android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图”。我明白为什么,但是当我收到 onDone 事件时如何修改按钮?

public class MainActivity extends ActionBarActivity implements TextToSpeech.OnInitListener {
    [...]
    @Override
    // OnInitListener method to receive the TTS engine status
    public void onInit(int status) {
       if (status == TextToSpeech.SUCCESS) {
         ttsOK = true;
         tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                @Override
                public void onDone(String utteranceId) {
                    Button listenButton = (Button) findViewById(R.id.listentts);
                    listenButton.setAlpha((float)1);
                    listenButton.setClickable(true);
                }

                @Override
                public void onError(String utteranceId) {
                    Log.d("MainActivity", "Progress on Error " + utteranceId);
                }

                @Override
                public void onStart(String utteranceId) {
                    Log.d("MainActivity", "Progress on Start " + utteranceId);
                }
            });
       }
       else {
         ttsOK = false;
       }
    }
    [...]
}

【问题讨论】:

    标签: android multithreading text-to-speech onutterancecompleted


    【解决方案1】:

    每个View 都有一个与之关联的Handler,因此无需创建新的。

    final View v = findViewById(R.id.listentts); // could be a class member
    v.getHandler().post(new Runnable() {
        @Override
        public void run() {
            v.setAlpha(1.0f);
            v.setClickable(true);
        }
    });
    

    【讨论】:

      【解决方案2】:

      试试这个:

      new Handler(Looper.getMainLooper()).post(new Runnable() {
          @Override
          public void run() {
              Button listenButton = (Button) findViewById(R.id.listentts);
              listenButton.setAlpha((float)1);
              listenButton.setClickable(true);
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 2017-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        相关资源
        最近更新 更多