2012-02-05 3 views
0

저는이 문제에 대해 지금 당분간 고민하고 있으며 stackoverflow에서 찾은 다른 해결책으로는 내 문제가 해결되지 않았습니다.처리기에서 TextView 가시성을 설정할 때 오류가 발생했습니다

내 UI 스레드 핸들러가 있습니다

//Global declarations 
private UIHandler mHandler; 

class UIHandler extends Handler { 
    TextView actionTV, objectTV; 

    public UIHandler(TextView t1,TextView t2){ 
     actionTV = t1; 
     objectTV = t2; 
    } 

    @Override 
    public void handleMessage(Message msg) { 
     // a message is received; update UI text view 
     actionTV.setVisibility(View.VISIBLE); //Throws "CalledFromWrongThreadExc" 
     objectTV.setVisibility(View.VISIBLE); 
     System.out.println("Received Message"); 
    } 
} 

    //Inside of onCreate() 
    actionText = (TextView) findViewById(R.id.diceAction); 
    objectText = (TextView) findViewById(R.id.diceObject); 
    mHandler = new UIHandler(actionText,objectText); 

    //Inside of onClick 
    renderer.rollDice(mHandler); 
    actionText.setVisibility(View.GONE); 
    objectText.setVisibility(View.GONE); 

을 그리고 핸들러 내 OpenGL을 렌더링 스레드에서 메시지를 수신합니다. 내가 테스트 한대로 메시지가 성공적으로 전달됩니다.

"action.setVisibility (View.VISIBLE)"행에 "CalledFromWrongThread"오류가 발생합니다. 나는 TextView를 onCreate()에서 Handler로 전달하는 것이 문제를 해결할 수 있다고 생각했지만, 그렇지 않았다. 누군가 내가 잘못한 곳을 지적 할 수 있으면 크게 감사하겠습니다.

+0

OnCreate()에서 생성 한 다음 렌더러에 rollDice()로 전달합니다. –

답변

0

이 질문에서 수정 한 후에는 텍스트보기를 '무효화'해야합니다. help with Handler class to update UI - Android

또한 일반적으로 UI 작업은 처리기 스레드에서 수행되지 않으며 처리기가 게시하는 실행 파일로 수행됩니다. 실행 파일은 활동 스레드에 있습니다. 이러한 제안이 도움이되는지 확인하거나 올바른 방향으로 이동하십시오.

0

가장 좋은 방법은 해결할 수 있는지 모르겠지만 렌더러의 스레드에서 runOnUiThread (Runnable) 함수를 사용하여 오류를 수정했습니다. 메시지를 보내기 전에는 다음과 같이 호출해야합니다.

관련 문제