2012-05-09 2 views
0

확장 할 클래스가 LinearLayout입니다. 아래LinearLayout을 확장하는 동안 Textview의 값이 업데이트되지 않습니다.

코드는 : ->change() 방법이라고지고 onDraw()이 때

class MyLinearLayout extends LinearLayout{ 

static TextView txt; 
static Button btn; 
static LayoutInflater inflater; 

public MyLinearLayout(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    View.inflate(context, R.layout.displayinfo, this); 
    inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    // TODO Auto-generated method stub 
    super.onLayout(changed, l, t, r, b); 
} 

public void change(){ 

    View view =inflater.inflate(R.layout.displayinfo, null); 
    //Button btn = (Button) inflate(context, R.id.btn, null); 
    txt = (TextView) view.findViewById(R.id.textView1); 
    Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      txt.setText("Changed"); 

     } 
    }; 
    //view.refreshDrawableState(); 


} 

@Override 
protected void onDraw(Canvas canvas) { 
    change(); 
} 
} 

그러나 값이 변경지고 있지 않습니다. 이보기를 WindowManager에 추가합니다.

이 확장보기에서는 기본적으로 array에서 값을 업데이트해야합니다. 그러나 문제는 루프를 계속 호출하는 방법입니다. invalidate()을 호출하면 계속 호출 할 수 있지만 CPU 사용량이 늘어나고보기가 너무 빨리 새로 고쳐져 사용자가 실제로 View을 볼 수 없게됩니다.

그래서 기본적으로 나는 두 가지 문제가 있습니다

1. TextView 위의 코드에서 업데이트 가져 오지?

2. invalidate() 메서드를 호출하지 않고 기본적으로 뷰 값을 지속적으로 업데이트하는 방법은 무엇입니까? 사전

답변

0

호출 변화

덕분에 텍스트를 변경하지 않기 때문에 변화의 내부()는 핸들러를 가지고 있고, 텍스트를 변경할 수를 말하는하여 handleMessage()를 재정의. 실제로 변경을하려면 Handler에 신호를 보내야합니다.

이 라인을 넣어보십시오 :

handler.sendEmptyMessage(0); 

장소에

//view.refreshDrawableState(); 

의 변경 방법은 실제로 텍스트 뷰의 텍스트를 설정해야합니다 다음.

편집 : 또한 변경 사항을 호출 할 때마다 새로운보기를 부 풀리지 않아야합니다. 사실 생성자에서 이미 수행했기 때문에 전혀 팽창시킬 필요가 없습니다 (이미 참조하려는 뷰입니다). TextView 참조를 얻으려면 앞에있는 참조없이 findViewById()를 호출 할 수 있어야합니다. 내부 변경() 대신에 생성자에서 수행해야합니다.

+0

나는 handler.sendEmptyMessage (0)을 두어 보았습니다. ,하지만 작동하지 않습니다. 우리가 처리기를 옆에두면 뷰의 데이터를 새로 고치는 다른 방법은 무엇입니까? – Robust

관련 문제