2012-04-20 3 views
0

(Android 3.2) 9 개의 버튼이있는 TableLayout이 있습니다. 나는 그들 중 어떤 것이 눌려져 있지 않을 때, 즉 언론이 완료되었을 때, 즉 ACTION_UP을 알고 싶다. 나는 어떤 단추가 마음에 들지 않는다. 단지 눌려진 단추가 방금 출시되었을 때를 알고 싶다.레이아웃의 버튼을 UN 버튼으로 눌렀을 때 알릴 수있는 방법

Android :: onTouch이 XML에 존재하기를 바랍니다. 예를 들어 Android :: onClick이 있고, 나는 onTouch 이벤트 처리기로 ACTION_UP을 찾습니다. 그러나 그렇지 않습니다. 나는 9 개의 분리 된 OnTouchListeners를 쓰는 것을 피하려고 노력하고있다.

제안 사항? 사전에

감사합니다. here을 볼 때

답변

2

왜, 당신은 당신이 ACTION_UP이있을 때하고 싶은 일을 실제로 코드에서 onTouchListener를 추가하지

+0

터치 리스너가 클래스에 하나만 있고 모든 9 개의 버튼에 청취자가 추가됩니다. –

+0

모두가 올바른 생각을 가지고 있습니다.하지만 가비가 먼저 듣기 때문에 옳은 답을 표시하고 모든 사람을 +1했습니다. 감사! – user316117

2

단지 하나의 리스너를 만들 수 없습니다 이유 :

OnTouchListener listener = new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     Button b = (Button) v; // the button that just gets released 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
      ... 
     } 
    } 
}); 

Button buttons[] = {...}; 
for (Button b : buttons) { 
    b.setOnTouchListener(listener); 
} 

또는 대안 :

루프를 이용하여 모든 버튼에 부착 0
int button_ids[] = {R.id.button1, R.id.button2, R.id.button3, ...}; 
for (int id : button_ids) { 
    ((Button) findViewById(id)).setOnTouchListener(listener); 
} 
2

각보기를 XML 대신 프로그래밍 방식으로 단일 onTouch 리스너에 할당 할 수 있습니다.

private View.OnTouchListener myListener = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     // Your logic    
     return false; 
    } 
}; 

다음 각 버튼이 추가 :

하나 개의 수신기를 확인합니다.

findViewById(R.id.btn1).setOnTouchListner(myListener); 
findViewById(R.id.btn2).setOnTouchListner(myListener); 

최적의 당신은 당신이 루프에서이 작업을 수행 할 수 있도록 XML에서 그들을 참조하는 프로그램 대신에이 버튼을 만들거나 가능한 한 뷰 그룹에 넣어와 자식 불구하고 반복하고 청취자에게 그 방법을 추가 할 수 있습니다.

관련 문제