코드를 보기 좋게 하기 위해서 각각의 Listener event에 대해서 생각해 볼 필요가 있다.

보통의 경우 layout의 view를 reference 하는 곳에 Listener를 만들곤 한다.

이렇게 하는게 명시적이긴 하지만, 이런 경우 보통은 onCreate()메소드 안에 거의 모든 Listener가 들어가게된다.

실제로 onCreate()메소드에 들어가지 않아도 될 코드들이 가득하게 되는 것이다.



보통의 경우 Listener 등록하는 방법
  private static final int CUSTOM_DIALOG = 1;
private static final int DEFAULT_DIALOG  = 2;
@Override
public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
        
findViewById(R.id.customDialog).setOnClickListener(new OnClickListener() 
{
public void onClick(View v) 
{
CustomDialogActivity.this.showDialog(CUSTOM_DIALOG);
}
});
        
findViewById(R.id.defaultDialog).setOnClickListener(new OnClickListener() 
{
public void onClick(View v) {
CustomDialogActivity.this.showDialog(DEFAULT_DIALOG);
}
});
}

(이 코드는 하나의 리스너만 오버라이드 되있을 뿐이지만, 실제로 액티비티에 버튼이 십수개만 되어도
코드는 알아보기 힘들 정도가 되어버린다.)








이번에는 하나의 Listener 객체를 새로 생성해 그 리스너를 각 뷰에 등록시키는 방법이다.

이렇게 생성된 Listener 객체는 하나의 Listener event 에 등록할수도 있고, 여러 Listener 이벤트에 등록할수도있다.
(등록이란 표현이 좀 그렇긴 해도, Listener event를 잘 나타내 주는것 같다.)



메소드 안이 아닌 다른 부분에,
Listener 객체 생성, 등록하는 방법
  private static HorizontalScrollView Scroll_Horizontal ;
private static ScrollView Scroll_Vertical ;
 
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
        
Scroll_Horizontal = (HorizontalScrollView)findViewById(R.id.spreadHScroll);
Scroll_Vertical = (ScrollView)findViewById(R.id.spreadVscroll);

Scroll_Vertical.setOnTouchListener((OnTouchListener)touchHandler);
Scroll_Horizontal.setOnTouchListener((OnTouchListener)touchHandler);
}

OnTouchListener touchHandler = new OnTouchListener() 
{
@Override
public boolean onTouch(View v, MotionEvent event) 
{
return false;
}
}; 

이렇게 touchHandler를 생성해서 등록해 onCreate()에서 등록해주면, 코드도 간결하게 볼 수 있고,
여러 View에 하나의 Listener를 사용할수도 있다.








심심해서 자기 전에 요 이미지를 약간 작업해 보았다.

몸에도 3D 효과 나게 할걸 그랬나.. 음...


Posted by croute

댓글을 달아 주세요