2012-05-20 3 views
0

두 가지 클래스가 있습니다. MainActivity는 뷰를 설정하고 ClassX는 MainActivity에서 뷰를 업데이트하려고합니다. ClassX는 MainActivity에서 호출 한 AsyncTask입니다 (관련성이있는 경우).Android/Java : 다른 클래스의보기를 변경 하시겠습니까?

내가하고 싶은 일은 mainTextLog라는보기의 텍스트를 변경하는 것입니다. 전역 TextView 변수를 선언하고 onCreate() 메서드에서 findViewById()를 사용하여 뷰를 설정합니다.

private TextView logger; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    logger = (TextView) findViewById(R.id.mainTextLog); 

} 

이제는 텍스트를 onCreate()에서 변경할 수 있어야합니다. 하지만 이후 다른 클래스 (ClassX) 변경하려면 메서드를 만들 필요가 :

public void setLogText(String text) { 
    logger.setText(text); 
} 

그러나 작동하지 않습니다. 로거 및 setLogText() 메서드를 정적으로 만들려고했으나 여전히 작동하지 않습니다. 앱이 충돌합니다.

아마 꽤 쉽지만 아이디어가 없습니다.

+0

나는 주어진 답변에 대해 언급 할 수있는 담당자가없는 나는이 실제 해답이 아니라고 미안하지만, 당신이 정적을 만들 수 있습니다 findViewById가 정적이 아니므로 findViewById가 포함 된 메서드입니다. (GHz에서 제시 한 대답이 제시하는 한). – SeaNick

답변

1

AsyncTask를 사용하는 경우 값을 onProgressUpdate 또는 onPostExecute으로 설정해야합니다.

당신은 정말 AsyncTasks

당신 설명서를 읽어야 CAN NOT는 UI 스레드에서 실행되지 않습니다 당신에게 예외를 줄 것 같은 doInBackground 방법에서 UI 업데이트합니다.

또한 응용 프로그램이 충돌 할 때 예외가 표시되어 문제가 무엇인지 더 잘 알 수 있습니다. 하지만 당신이 잘못된 스레드에서 텍스트를 업데이 트하려는 것 같아요.

+0

알겠습니다. onProgressUpdate()를 사용하면 어떻게 될까요? – qwerty

+0

완료 후 진행 상황을 업데이트하려면 onPostExecute를 사용하십시오. 완료가 가까워지면 업데이트 (예 : 진행 상황 표시)하려면 publishProgress : http://developer.android.com/reference/android/os/AsyncTask.html#publishProgress(Progress)를 호출하여 onProgressUpdate를 사용합니다. ..).실제로 어떻게하는지 정확하게 설명하는 문서를 읽어야합니다. –

+0

좋아, 내일 (침대로 향하고있다) 내일 보자. 감사! – qwerty

0

한 가지 가능성은 다음과 같습니다. setLogText을 다른 클래스 X에 호출하면 MainActivity가 더 이상 존재하지 않아서 logger이 null 참조가됩니까?

1

나는이 앱에서 많은 일을 해냈다. 안드로이드 타블렛에서 MDI 타입 앱을 사용하고있다.

은 ... MainActivity에서

가 (또는 클래스 호출)과 같이 호출하면 자식에

public static void setText(String txt){ 
    ((TextView)findViewById(R.id.mainTextLog)).setText(txt); 
} 

이 .... 당신이 요구하는지 일을하려면

MainActivity.setText("myTextToShow"); 

그것뿐입니다 ... 안드로이드 API 레벨 12를 사용하고 있습니다 ... 만약 내가 correcty를 기억한다면 그것은 API 레벨 7에서도 잘 작동합니다. 이 도움이

희망 ...

+0

그건 꽤 많은 코드를 가지고 있는데, 이미 로거에 저장된 뷰를 가지고있다. 그래도 작동하지 않았다. – qwerty

+0

mainActivity는 설정하려고 할 때 null입니까? main 메소드의 중단 점을 띄우지 않아도 파이어 링이 발생하는지 확인하십시오. – GHz

관련 문제