2013-06-18 4 views
0

대기 후 표시되지 않습니다 나는 세 가지 레이아웃이 있습니다. 내가레이아웃이

setContentView(int); 

사용하는 레이아웃을 설정하려면 관련 코드가 될 수 있습니다

public class TrainingActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout1); 
     final Button inputButton = (Button)findViewById(R.id.inputButton); 
     inputButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        changeLayouts(); 
      } 
     }); 
    } 
    public void changeLayouts() { 
     setContentView(R.layout.layout2); 
     try { 
      TimeUnit.MILLISECONDS.sleep(3000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     setContentView(R.layout.layout3); 
    } 
} 

내 생각이었다 안드로이드는 (Qt는 같은)에 "이벤트 루프"와 같은 것을 사용할 수 있습니다 내 방법은 차단할 것 콘트롤은 "Event-Loop"로 돌아가서 레이아웃을 표시합니다. 하지만 내 오류를 찾을 수 없습니다.

+2

당신의 디자인을 재고 작동합니다. 왜 첫 번째 장소에서 동일한 활동에 대해 두 번 이상 setContentView를 사용하게됩니까? – Raghunandan

+0

왜 이것이 구체적으로 실패하고 있는지 확신 할 수 없지만, NotResponding을 던지지 않는 것이 놀랍습니다. 3 초의 일시 중지 후 UI 동작을 트리거하는 동작이 필요하면 [AsyncTask] (http://developer.android.com/reference/android/os/AsyncTask.html)를 사용하는 것이 좋습니다. – DevOfZot

답변

1

귀하의 layout2이 표시되지 않는 이유는 TimeUnit.MILLISECONDS.sleep(3000);입니다. 여기서하고있는 일은 UI 스레드를 잠자기 상태로 놓는 것이므로 UI ​​스레드는 레이아웃 변경 요청을 처리 할 수 ​​없습니다. 깨어 났을 때 즉시 layout3으로 설정되어 layout2이 표시되지 않습니다.

당신은 당신이 예상대로

그래서이 일을해야 실행을 연기 Handler.postDelayed(Runnable, long) 사용을 고려할 수 :

public class TrainingActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout1); 
     final Button inputButton = (Button)findViewById(R.id.inputButton); 
     inputButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        changeLayouts(); 
      } 
     }); 
    } 
    public void changeLayouts() { 
     setContentView(R.layout.layout2); 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       setContentView(R.layout.layout3); 
      } 
     }, 3000); 

    } 
} 
0

이 시도, 그것은 확실히

public void changeLayouts() { 
     setContentView(R.layout.layout2); 

     Thread Timer = new Thread(){ 
     public void run(){ 
      try{ 
       sleep(3000); 
      } catch(InterruptedException e){ 
       e.printStackTrace(); 
      } finally { 
       setContentView(R.layout.layout3);     
      } 
     }  
    }; Timer.start(); 
} 
관련 문제