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 |