2013-04-10 4 views
0

setContentView()을 호출 한 후 뷰에 대한 정보를 얻는 데 문제가 있습니다. 나는 단추를 클릭 한 후 활동의 레이아웃을 바꾸고있다. 다음은 내 코드 예제입니다.setContentView() 메서드를 기다리는 중

public void onClickButton1(View v) { 
    setContentView(R.layout.activity_main); 
    setScreen(); 
} 

그러나 실행 setScreen() 방법을 durring, 레이아웃은 아직 렌더링되지 않습니다, 그래서 (각각 I는하지만 항상 0을 얻을 수 있습니다) 레이아웃을위한 몇 가지보기에 getWidth()를 호출 할 수 없습니다. setContentView()까지 어떻게 기다릴 수 있습니까? 다음을 사용하십시오.

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    setScreen(); 
}  

으로 충분하지 않습니다. 활동주기에 따라 레이아웃을 독립적으로 변경해야합니다.

+0

왜 내가 새로운'Activity' 또는'Fragments'를 사용하는 대신이 방법을 사용하고 있는지 물어볼 수 있습니까? 이것은 일반적으로 좋은 방법이 아닙니다. IMHO – codeMagic

+0

저는 안드로이드 개발에 아주 새로운데, 어떻게하는 것이 가장 쉬운 방법 인 것처럼 보였습니다. 내 접근 방식을 바꿔야 할지도 모른다. 고마워요 많이 – Mara

+0

나는 활동과 조각을 사용하는 방법에 대한 codeMagic에 동의하는 동안 안드로이드에 대한 코딩을 통해 자신의 방식을 배우고있는 사람을 위해 나는 무엇을 의미하는 시간에 작동하는 것이 좋습니다 ... 그냥 메모리/장치 지원/안정성. 자바와 안드로이드/그레블 개발에 대한 생각을 시작하면 효율적인 방법/방법을 배우는 며칠 안에 어플리에서 응용 프로그램을 다시 제작할 수 있습니다. – Mayhem

답변

0

사용하도록 응용 프로그램을 재 이럴 인 다른보기 사이를 전환 할 ViewFlipper를 사용하여 완전히 새로운 레이아웃을 모든보기를 제거하고 팽창 할 필요가, 또는 중 귀하의 레이아웃 :

setContentView(R.layout.yourLayoutName); 
    View yourLayout = findViewById(R.id.ID_OF_YOUR_LAYOUT); 
    ViewTreeObserver vto = yourLayout.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 

      //Do your work 
      vto.removeOnGlobalLayoutListener(this); 
     } 
    }); 
+0

그것은 작동합니다. 많은 감사 – Mara

+0

@Mara 그 케이스의 왼쪽에있는 체크 표시를 클릭하여 해답을 수락하십시오. –

+0

내 조각으로 이것을 사용하면서 일부 측면에서 여전히 Java를 배우는 동안. ViewTreeObserver vto 객체는 final이어야합니다. 왜냐하면 onGlobalLayout에서 호출되는 removeOnGlobalLayoutListener – Mayhem

0

setContentView()을 사용하여 원하는 결과를 얻는 쉬운 방법은 없습니다. 당신은 가장 좋은 방법은, 당신은 할 수있는 ViewTreeObserver를 연결해야 Fragments

+0

'setContentView (...)'를 호출 할 수있는 횟수에는 제한이 없습니다. 하나의 활동에서 여러 레이아웃을 관리 할 수는 있지만 그 작업은 가능합니다. – dymmeh

+0

아니요,하지만 OP가 원하는 것을 도달하기 위해'setContentView() '를 사용하는 쉬운 방법은 없습니다. 오해의 소지가 있으므로 대답을 편집하겠습니다. –

+0

OK. 진심으로 감사드립니다. – Mara

관련 문제