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 Set mChangeListeners = 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

 

소스 :

SampleAddListener.zip

+ Recent posts