2012-11-21 6 views
0

Activity의 하위 클래스가 아닌 클래스에서 TextView를 설정하는 데 문제가 있습니다. 이 클래스는 기본적으로 타사 서버에서 등록 및 REST 요청을 처리하는 데 사용됩니다.다른 클래스에서 TextView를 설정하는 방법 (Activity.class로 확장되지 않음)

타사 서버에서 텍스트 필드 정보를 가져온 후 주 활동에 TextView를 설정하기에는 너무 늦었습니다.

  • MainActivity가 이미 시작되었으므로 SharedPreferences를 사용하여이 정보를 설정할 수 없습니다.
  • 자바 클래스가 액티비티 클래스가 아니기 때문에이 정보를 번들로 전달할 수 없습니다.

이 정보를 전달하고 MainActivity에서 TextView를 설정하려면 어떻게해야합니까? 이 일을 할 수있는 방법이 있습니까?

+0

실제 구현을 보지 않고도 해결책을 제시하기는 어렵습니다. – Egor

+0

이 게시물을 참조하십시오 http://stackoverflow.com/questions/5813785/how-to-update-textview-from-a-class-that-doesnt-extend-activity-class –

+0

textView를 정적으로 사용하고 yourMainActivity를 사용하려고합니다. textview.setText ("test"); –

답변

2

이 작업을 수행하는 적절한 방법은 수신기를 만드는 것입니다. , 나머지 서비스를 호출하는 클래스에서 다음

public interface OperationCompletedListener{ 
void onOperationCompleted(String resultValue); 
} 

이 리스너하고 설정하는 방법에 대한 변수를 만들 :

는 인터페이스를 만듭니다.

private OperationCompletedListener mListener; 

public void setOperationCompletedListener(OperationCompletedListener listener){ 
mListener=listener; 
} 

그런 때 다음과 같은 당신의 나머지 서비스 완료된 통화 다음 텍스트 뷰가 포함 된 작업 클래스의 다음

if(mListener!=null){ 
mListener.onOperationCompleted("your value to be passed"); 
} 

, OperationCompletedListener의 객체를 생성하고 설정을 사용하여 다른 클래스로 설정 우리가 이전에 만든 방법. 그런 다음 onOperationCompleted 메소드에서 값으로 텍스트 뷰를 설정하면 완료됩니다. 당신이 그것을 인스턴스화 할 때

private OperationCompletedListener mOperationCompletedListener=new OperationCompletedListener() { 

    @Override 
    public void onOperationCompleted(String resultValue) { 
     yourTextView.setText(resultValue); 
    } 
}; 

restServiceClassObject.setOperationCompletedListener(mOperationCompletedListener); 
+0

고맙습니다. – StillHopeForMe

+0

restServiceClassObject.setOperationCompletedListener (mOperationCompletedListener)를 어디에서 사용해야하는지 알 수 없습니다. 요구. 좀 도와 줄 수있어? – StillHopeForMe

+0

텍스트 뷰가 포함 된 활동 클래스에 있어야합니다. –

0

활동 클래스에서 텍스트 뷰를 업데이트하는 정적 메소드를 생성 할 수 있습니다. 그런 다음 원할 때마다 다른 클래스에서이 메서드를 호출하십시오.

0

봅니다 비 Activity classActivity을 전달합니다. 예를 들어 당신이 (이 abstract있어) 인스턴스화하지 않으려면

public class NonActivityClass { 
    private Activity parentActivity; 
    public NonActivity(Activity parentActivity) { 
     this.parentActivity = parentActivity; 
    } 
} 

또는 당신은 당신의 NonActivityClass에 정적 메서드에 Activity를 전달할 수 있습니다. 그런 다음 TextView을 부 풀거나 부모로부터 findViewById을 수행하고 텍스트를 설정할 수 있습니다.

내 경험에 비추어 볼 때, 이 아닌 최종 변수를 절대로 사용하지 말아야합니다. 앱이나 휴대 전화를 다시 시작하거나 Android에서 앱 프로세스를 중단하면 변수의 참조 및 상태가 손실되어 앱이 다운 될 수 있습니다.

관련 문제