2012-02-17 4 views
3

나는 ScrollView를 만들고 거기에 연결된 OnClickListeners가있는 ImageViews로 채웠지 만, 이제는 ScrollView를 스크롤하려고 할 때 OnClickListeners가 방해가되어 부드러운 스크롤을하지 못하는 것 같습니다.각 항목에 대해 OnClickListeners가있는 ScrollView?

다른 방법으로 ScrollView 대신 ListView를 사용하여 문제를 해결할 수 있습니까?

감사합니다.

답변

2

각 ImageView마다 OnClickListener가있을 필요는 없습니다.

콜백 정의는 v가 클릭 된보기입니다

public abstract void onClick (View v) 

입니다.

원하는 작업에 따라 특정보기를 식별 할 수 있습니다. 그냥 일반적인 뭔가를하려는 경우, 구체적으로 예를보기를 확인해야하는 경우 (예를 들어, 색조를 적용), 다음이

... 
public void onClick(View v) { 
    ImageView iv = (ImageView) v; 
    iv.setTint(Color.BLUE); // Or whatever generic operation you want 
} 

매우 간단 그것의 의견 정적하지 않은 경우, 나는 보통 다음 고유 식별 할 setTag()getTag() 방법을 사용할 수 있습니다, 그것을

... 
public void onClick(View v) { 
    int id = v.getId(); 
    switch (id) { 
     case R.id.save: 
      //do stuff 
      break; 
     case R.id.open: 
      //do stuff 
      break; 
    } 
} 

를 식별 할 항목 ID를 사용하는 XML 메뉴의 일부 (그리고 동료 유용한 데이터!) 각보기 :

... 
public void onClick(View v) { 
    // the MyViewInfo object was associated with the view somewhere else, presumably when the view was created 
    MyViewInfo info = (MyViewInfo) v.getTag(); 
    File datafile = info.getFileName(); 
    ... 
    } 
} 
+0

감사합니다. 모든 것이 동적이기 때문에 한 번만 더,이 onClick 함수를 태그가 설정된 ImageView와 어떻게 연관시켜야합니까? –

+0

'onClick' 메소드를 가지고있는 클래스 X는'View.onClickListener' 인터페이스를 구현해야합니다. 그런 다음 각보기에 대해 setOnClickListener (x)를 호출해야합니다. 여기서 x는 X의 인스턴스입니다. 컨테이너보기가 모든 하위보기에 대한 클릭 이벤트를 전달할만큼 똑똑한 경우에는 다음과 같이 'setOnClickListener'를 호출하면됩니다. 부모보기. – CjS

+0

은 ScrollView에 있습니까? –

관련 문제