사용 LocalBroadcastManager, 방송의 청취를 시작합니다 텍스트 뷰가 포함 된 활동 :
이
Intent intent = new Intent(MyActivity.class.getSimpleName());
intent.putExtra("actionType", "updateTextView");
// Once this is called, your broadcast receiver in MyActivity should receive it and start processing
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
또한으로 기억 : 스레드가 화면을 업데이트 할 필요가 무엇인가를받을 때마다
public class MyActivity extends Activity {
private TextView mTextView;
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getStringExtra("actionType");
if(action.equals("updateTextView")){
mTextView.setText("whatever you want to set");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Start listening, you can put it on onResume too
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, new IntentFilter(MyActivity.class.getSimpleName()));
mTextView = (TextView) findViewById(R.id.something);
}
}
그래서,이 전화 onDestroy 또는 onPause에서 등록을 취소하십시오.
* 사이드 노트 : 안드로이드 지원 v4 라이브러리를 가져와야하고 Intent.putExtra ("", "") 및 Inteng.getExtra ("");를 사용하여 간단한 String 또는 객체를 의도별로 전달할 수 있습니다.
를 내가 내 질문에 내가 알고 바보 같은데 어떻게 onReceive 메서드에서 내 UI 구성 요소에 액세스 할 수 있습니까? – Fingolfin
음, 어리석은 질문은 없습니다. 일반적으로 MyActivity 클래스에 선언 된 클래스 변수가 있습니다. 코드의 처음 부분을 편집합니다. –
작동 :) :) 여기에 무슨 일이 있었는지 이해하겠습니다. 우리는 기본적으로 하나의 스레드에서 수신하는 데이터를 전체 프로세스로 브로드 캐스팅하고 있으므로이 프로세스 내의 모든 브로드 캐스트 수신기는 인 텐트를 사용하여 catch합니다. 권리? – Fingolfin