마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서비스에서 xml을 참조한 ViewGroup의 TextView에서 setText 안먹는 경우?

0 추천

아래 코드입니다..

...

 private LayoutInflater layoutInflater;
private ViewGroup rootView;
 int wrap_content = WindowManager.LayoutParams.WRAP_CONTENT;

...
        linearLayoutPopup = new LinearLayout(this);
        linearLayoutPopup.setBackgroundColor(getResources().getColor(R.color.colorExResult));     
        linearLayoutPopup.setOrientation(LinearLayout.HORIZONTAL);

        layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);


        mParams = new WindowManager.LayoutParams(
                wrap_content,
                wrap_content,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,  
                PixelFormat.TRANSLUCENT); 
        mParams.gravity = Gravity.LEFT | Gravity.TOP; 
        mParams.y = 100;

        linearLayoutPopup = (LinearLayout) layoutInflater.inflate(R.layout.service_bike_value, null);
        mWindowManager.addView(linearLayoutPopup, mParams);


        rootView = (ViewGroup) layoutInflater.inflate(R.layout.service_bike_value, null);

        textViewSpeed = (TextView) rootView.findViewById(R.id.textView_Speed);

 

        timerHandler.sendEmptyMessage(0)

 

        ...

 

public Handler timerHandler = new Handler(){

    public void handleMessage(Message msg)
    {
        textViewSpeed.setText(""+speed);

        Log.d("textViewSpeed", textViewSpeed.getText().toString());
        timerHandler.sendEmptyMessageDelayed(0, 200);
 }
};

 

연결된 layout의 이름은 layout.service_bike_value

이렇게 짜봤는데 setText가 되질않아요,

계속 xml에 적혀있는 text에서 바뀌질 않습니다.

Log로 .getText().getString()하면 로그값은 또 신기하게  바뀐 String 값 으로 잘찍힙니다.

처음에는 레이아웃 연결하지않고 코드로 View를 생성해서 했었는데 제대로 값이 지속적으로 표기가 잘되었습니다. 근데  View가 복잡해지면서 레이아웃을 연결했더니 setText가 먹질않네요

 

setText뒤에 초기화해주는게 필요한가요?

대체 어디가 잘못된걸까요..;; 고수님들의 도움이 필요합니다.

R0R0 (2,610 포인트) 님이 2017년 2월 27일 질문
R0R0님이 2017년 2월 27일 수정
ui thread 에서 하라는 로그 없던가요? 그리고 서비스에서는 ui 만지면 안 됩니다. 매우 나쁜 코드예요.
답변 정말감사합니다! 앱이 내려가면 서비스에서 View 생성해서 수치를 계속 표기해줘야하는데.. service에서 View를 생성하지말고 sevice에서 Acitivity를 생성해서 거기다 코드를 넣는게 좋을까요?
서비스에서는 broadcast 만 날리고 액티비티에서는 신호 받아서 처리해야죠. 애초에 앱이 내려갔는데 뷰를 어디서 표시하는 거죠?
원래는 서비스에서 최상위 화면에서 코드로 뷰를 생성하고 속도값을 기기에서 계속 받아와서 핸들러에서 처리를 했었어요. 위에 코드는 뷰가 복잡해져서 레이아웃 적용한건데 레이아웃 먹이니 setText가 안먹네요..
아무튼 레이아웃들을 뷰로 빼던가 해서 복잡하지 않게 만들고, 서비스에서는 뷰를 건들지 말게 바꾸세요

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...