2012-04-04 2 views
5

하나의 ListView를 갖고 싶습니다. 항목을 클릭하면 왼쪽으로보기가 슬라이드됩니다. 클릭하면 ListView에서 항목에 애니메이션을 적용하는 방법?

그래서 내가 가진 :
listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      arg1.startAnimation(openAnimation); 
     } 
    }); 

그러나, 애니메이션 클릭하고 목록 대신 한 다른 항목에 적용

. 그 행동은 무작위 인 것처럼 보입니다. 동시에 언젠가 하나 이상의 항목에 동시에 일어났습니다.

어댑터의 재사용 방법으로 인해 발생하는 것으로 생각됩니다. 항목을 만드는 것입니다. 내 어댑터에서 getView 메소드를 수정하여 호출 할 때마다 새 뷰를 부풀려 갔다. 그러면 애니메이션이 더 이상 발생하지 않습니다.

해결 방법이 있습니까? 내 어댑터 내에서 애니메이션을 이동하려고하지만 Listview에서 다른 작업과 연결할 수 없습니다.

궁극적으로 항목을 클릭 할 수있게하려면 왼쪽/오른쪽으로 스 와이프하면 삭제 버튼이 표시됩니다 (iOS 삭제 동작). 내가 잘못 추적하고 있니? Android에서 알림 바에서 스 와이프하여 제거 할 수 있기 때문에 가능합니다.

+0

"iOS 삭제 동작"NO NO NO NO! Android는 iOS가 아닙니다! iOS 디자인 패턴을 사용하지 마십시오. 안드로이드 사용자는 기대하고 안드로이드 사용자 경험 안하고 아이폰 경험. – slayton

+0

귀하의 우려를 이해합니다. 나는이 생각에 완전히 반대한다. 그러나 나는 여기서 결정을 내리는 사람이 아닙니다. 하지만 당신은 그것을 인정해야합니다, 슬쩍 제거에 안드로이드에있다. 구현은 거기에있다, 단지 다른 프리젠 테이션. – RobGThai

+0

기본 목록 뷰 클래스가이 슬쩍을 지원하지 않으므로 알림 창에 listview의 사용자 지정 구현이있을 수 있습니다. – slayton

답변

1

this 스레드도 확인하는 것이 좋습니다.

나는 이러한 유형의 동작에 맞게 어댑터를 수정하지 않고도 가능하다고 생각하지 않습니다. 내가 이해하는 한, 당신은 다른 ListView 행에서 스 와이프 제스처를 인식하는 코드를 구현하는 데 아무런 문제가 없으며 행에 따라이 제스처를 따라야하는 애니메이션에서만 사용할 수 있습니다.

적어도 2 개의 행 유형 (일반 행 및 삭제할 행)에 맞게 어댑터를 다시 작성합니다. 어댑터의 "getView()"메소드에서는 일반 뷰의 convertView 만 재사용해야합니다. 삭제하려는 행은 해당 행을 다시 사용해서는 안됩니다. 따라서 애니메이션 행마는 다른 행을 수정하지 않습니다. 정상적인 행을 클릭하면 먼저 클릭 한 위치의 행이 삭제 될 유형임을 알리고, .notifyDatasetChanged()를 호출 한 다음 해당 행에서 애니메이션을 시작해야합니다.

+0

해당 행에서 애니메이션을 시작하려면 어떻게해야합니까? 나는보기 v = inflater.inflate (R.layout.list_view_custom, null); 그리고 청취자에서 나는 최종 애니메이션 애니메이션 = AnimationUtils.loadAnimation (parent.getContext(), R.anim.fade_in_expand); v.startAnimation (애니메이션); 하지만 아무 일도 발생하지 않습니다. – MinceMan

관련 문제