안드로이드 개발 질문/답변
(글 수 45,052)
public static NextPlace()
{
RadioButton.settext(......);
... 대충 이렇게... 몇개의 버튼과 텍스트뷰에 글자를 써 넣습니다.... 디비에서 읽어 와서요..
그리고...
화면에 다 뿌려지고 나면....즉 화면이 새로운 정보로 업뎃 되고 나서....
CallMyTTS();
}
public static CallMyTTS()
{
TTS 실행하는 코드..................
}
위에서.. 화면 업뎃 내용이...너무 늦어서..
이미 CallMyTTS() 가 실행되어 버립니다.
CallMyTTS() 는 변경된 내용에 대한 것들인데...
화면에 아직 이전 정보들이 있는데.. TTS 가 새로운걸 읽어줘야 하는데..예전꺼를 보고 있는 상태에서...
새로운 걸..읽어주는 코믹한 상황이 벌어지고 있습니다.
위의 변경 작업이 종료되어야 CallMyTTS() 로 가는 순차적인 작업이라...쓰레드는 아닐 것 같은데요.
refreshDrawablestate, invaliate 별별 메서드 다 써봤는데요... 화면 업뎃이 안되네요...흐.....헐...
2010.08.28 01:00:08
팝업에서 확인 눌렀을때 CallMyTTS를 실행시키세요... 안드로이드에서는 다이얼로그가 화면을 점유하는 상태에서
확인 혹은 취소를 누르지 않아도 다른 로직을 그대로 실행합니다.
다이얼로그가 사라지는 타이밍에 무언가 하고 싶으시다면 버튼 리스너에 추가시키세요.
그리고 UI 업데이트 다음에 CallMyTTS를 하고 싶으시면
handler.post를 이용해서 CallMyTTS를 실행해 보세요.
더 정확하게 하려면 UI업데이트들도 handler.post로 실행하면
queue에서 순서가 명확해지기 때문에 분명하게 쓸수 있을거라 생각합니다.
확인 혹은 취소를 누르지 않아도 다른 로직을 그대로 실행합니다.
다이얼로그가 사라지는 타이밍에 무언가 하고 싶으시다면 버튼 리스너에 추가시키세요.
그리고 UI 업데이트 다음에 CallMyTTS를 하고 싶으시면
handler.post를 이용해서 CallMyTTS를 실행해 보세요.
더 정확하게 하려면 UI업데이트들도 handler.post로 실행하면
queue에서 순서가 명확해지기 때문에 분명하게 쓸수 있을거라 생각합니다.
2010.08.28 01:06:10
"handler.post 를 이용해서 CallMyTTS 를 실행" 이 말씀이 어떤 뜻인지.. 감이 없는데요.
구글 검색에 도움이 되도록 조금 더 힌트를 주실 수 있나요? 키워드라도....키워드라도 알아야 구글에 물어볼텐데...ㅠㅠㅠ
도움 부탁드립니다. 구글에서 refreshDrawable... invalidate..등등... 저와 같은 문제를 겪는 사람들이 무척 많아서
질문은 많이 찾았는데요... 답변은 찾기 어렵네요.. 있더라도.. 멀티 액티비티일 경우의 설명이거나...저와는 상황이 다른 경우네요.
미리 감사~~
2010.08.28 01:38:16
구글에서 아래와 같은 코드를 두곳에서 찾았습니다.
You can use Handler to update UI like below.
Runnable tricker = new Runnable(){
public void run(){
//do UI update here. ------------------------> 다른 한곳에서는 여기에 requestLayout() 을 호출하라고 되어 있네요.
}
}
Handler handler = new Handler();
handler.post(ticker);
helps this can help you.
그래서...requestLayout() 을 해야할 녀석인 라디오버튼에 붙혀서 해 봤습니다.
하지만...변함이 없네요. 위의 코드에서 "do UI update here" 라고 하는 어떻게 해야 update 가 되는건지....원...requestLayout()
도 안되구...답답하네요.invalidate() 도 안되구요...어떻게 "do UI update here" 를 코드로 풀어야 할지...
handler.post( new Runnable() {
public void run() {
((RadioButton) ((Activity) mMain).findViewById(R.id.rb0)).requestLayout();
((RadioButton) ((Activity) mMain).findViewById(R.id.rb1)).requestLayout();
}
}
);
CallMyTTS();
Runnable tricker = new Runnable(){
public void run(){
//do UI update here. ------------------------> 다른 한곳에서는 여기에 requestLayout() 을 호출하라고 되어 있네요.
}
}
Handler handler = new Handler();
handler.post(ticker);
helps this can help you.
그래서...requestLayout() 을 해야할 녀석인 라디오버튼에 붙혀서 해 봤습니다.
하지만...변함이 없네요. 위의 코드에서 "do UI update here" 라고 하는 어떻게 해야 update 가 되는건지....원...requestLayout()
도 안되구...답답하네요.invalidate() 도 안되구요...어떻게 "do UI update here" 를 코드로 풀어야 할지...
handler.post( new Runnable() {
public void run() {
((RadioButton) ((Activity) mMain).findViewById(R.id.rb0)).requestLayout();
((RadioButton) ((Activity) mMain).findViewById(R.id.rb1)).requestLayout();
}
}
);
CallMyTTS();
위의 코드 말구.. 팝업 메시지를 띄우는 코드가 있는데....
팝업이 뜨자마자... 확인 버튼도 안눌렀는데... 그 팝업 뒤에서 호출되는 CallMyTTS() 로 그냥 가버리네요...그래서 미리 TTS 소리가 나오구요..
순차로 진행할 때는 순차로 진행해야 되는데...왠.....오토 쓰레드인지.....