MainActivity.java 에서.. 이벤트 수신
다 대 다 관계일때, 즉 이벤트를 호출하는곳도 여러곳, 이벤트를 등록하는곳도 여러곳일때 사용할 수 있다.
참고로 다른 방법으로는 broadcast를 사용할 수도 있다.
public class MainActivity extends Activity implements Change.ChangeListener{
Context mContext;
TextView mTextView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
mTextView1 = (TextView) findViewById(R.id.textView1);
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, SecondActivity.class);
startActivity(intent);
}
});
Change.addChangeListener(MainActivity.this); // 리스너 등록
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onChangeHappened() { // 이벤트 받은후 처리
Toast.makeText(mContext, "이벤트 받음", Toast.LENGTH_SHORT).show();
Change change = Change.current();
String text = change.getMessage();
mTextView1.setText(text);
}
@Override
protected void onDestroy() {
Change.removeChangeListener(MainActivity.this); // 리스너 제거
super.onDestroy();
}
}
SecondActivity.java 에서.. 이벤트 전달
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// 이벤트 전달
Change.setChangCondition("버튼 눌렀당..");
}
});
}
}
Change.java 에서.. 이벤트 및 리스너 관리
/** ** 변경시, 등록한 리스너에게 알리기 위함 ** */ public final class Change { private static String mMessage; private static Change mChange; public interface ChangeListener{ public void onChangeHappened(); } private static SetmChangeListeners = new HashSet (); public static void addChangeListener(ChangeListener listener){ mChangeListeners.add(listener); } public static void removeChangeListener(ChangeListener listener){ mChangeListeners.remove(listener); } public static void setChangCondition(String message){ mMessage = message; notifyOnChangeHappened(); } private static void notifyOnChangeHappened(){ for (ChangeListener listener : mChangeListeners) { listener.onChangeHappened(); } } private Change(String message){ mMessage = message; } public static Change current(){ if(mChange == null){ mChange = new Change(mMessage); } return mChange; } public String getMessage(){ return mMessage; } }
참고 : android interface를 이용한 상태 변동시 체크 방법 2
참고 : android interface를 이용한 상태 변동시 체크 방법 1
소스 :
'안드로이드 개발 팁' 카테고리의 다른 글
| 안드로이드 콜스택(call stack) 확인하는 방법 (0) | 2013.12.03 |
|---|---|
| android inflater 전개 방법 ( UI 동적 구현) (0) | 2013.11.21 |
| android interface를 이용한 상태 변동시 체크 방법 2 (0) | 2013.09.12 |
| Context 값 얻기 (0) | 2013.09.05 |
| android Bundle (foreach로 값 받기) (0) | 2013.08.28 |
SampleAddListener.zip