2012-06-20 2 views
5

사용자가 목록에서 항목의 순서를 변경할 수있는 ListPreference를 찾고있었습니다. 항목은 드래그 가능하며 사용자가 다시 정렬 할 수 있습니다.드래그 가능한 항목으로 ListView를 만드는 방법은 무엇입니까?

QuickPanel의 경우 사용자 지정 ROM에서 이것을 보았습니다 (Cyanogenmod에서 보았습니다). 여기에 스크린 샷을 통해 아이디어를 얻을 수있다 :

Screenshot of the "widget Button Order" in QuickPanel Settings of Sabotage ROM

나는 정의의 ListView 항목을 확인하고 항목을 드래그 할 수 있음을 나타 내기 위해 아이콘을 설정할 수있는 방법을 알고 있지만, 내가 그들을 드래그 할 수 있도록하는 방법을 모른다 그에 따라 주문을 변경하십시오. 환경 설정에서 그것들을 저장하는 것에 관해서는, 나는 쉽게 구현 될 수있는 this을 발견했다.

PS ...

나는 사이 애 노젠 모드를 알고는 오픈 소스,하지만 난이 특정 일에 대한 소스를 찾을 수 없습니다 :(내가 얻을 수있는 가장 가까운 다른 화면 근처의 어딘가에 있어야한다 this이었다 이에 대한 팁을 사전에

감사

UPDATE :. 내가 추가 및 수정을, 허용 대답에서 파일을 사용하여 결국 내가 더 참조를 위해 여기를 나열하고

    ..
  • 이 항목이 드래그 가능한 시각적 피드백 (TextView 근처의 ImageView)을 구현하려면 맞춤형 어댑터 (필자의 경우 ArrayAdapter)를 사용하십시오. 이것은 선택 사항입니다.

  • DragListener 및 RemoveListener를 설정하여 그에 따라 목록을 업데이트합니다. ListView는 자동으로 그렇게하지 않습니다. 그리고 사용중인 어댑터에 따라 다릅니다.

  • ViewGroup에보기를 캐스팅 한 줄이 있었는데 약간의 오류가있어서 아무 문제없이 캐스트를 제거 했으므로 필요하지 않았습니다. (onInterceptTouchEvent 메소드에서).

  • mRemoveMode = 1;을 TouchInterceptor의 생성자로 변경하거나 FLING = 0; SLIDE = 1; TRASH = 2; 중 하나를 변경하십시오. 나는 TRASH, 리소스도 사용할 수 있어야한다고 생각합니다.

실제로 파일은 대답의 링크가 아닌 Cyanogenmod에서 가져 왔지만이 파일은 같았습니다. 그것은 다른 사람을 도움이 나는 희망

:

은 (글을 쓰는 시점에서, R12에서) 프로젝트의 실제 파일입니다 :)

+0

표준 기능이 없으므로 onTouch를 재정의하고 터치 이벤트를 감지해야합니다. 오버라이드는 longClick 이벤트에 의해 활성화 될 것입니다. 그렇지 않으면 사용자가 항목을 드래그하거나 목록을 스크롤 할 것인지 여부를 알 수 없습니다. – Christine

+0

@Christine [OnDragListener] (http://developer.android.com/reference/android/view/View.OnDragListener.html)를 사용할 수 없습니까? – jadkik94

+0

@ jadkik94 안녕하세요. 이러한 파일을 사용하여 동일한 것을 구현하려고합니다. 그러나 꽤 오래된 질문이기 때문에 드래그 가능 목록을 구현하는 더 편리한 방법이 있다고 생각 하나? 나는 어떤 것도 발견 할 수 없었다. 당신이 줄 수있는 모든 포인터를 주셔서 감사합니다 .. 고마워. – Anjani

답변

5

할 수있는 기본 제공 위젯이 없습니다. 그러나 AOSP 뮤직 플레이어가 재생 목록에서 노래를 다시 정렬 할 수 있도록 사용자 정의 구현을 살펴볼 수도 있습니다.ListView를 확장하는 클래스의와 MotionEvents 다시 주문하는 모든 항목을 처리뿐만 아니라 항목을 삭제하는 와이프를 검출 할 책임이

TouchInterceptor.java

. 여기서는 TrackBrowserActivity.java 클래스의 액티비티로 구현 된 것을 볼 수 있습니다.

세 개의 인터페이스 (DragListener, DropListener 및 RemoveListener)도 알아 두어야합니다. 이러한 인터페이스를 사용하여 해당 이벤트에 대한 콜백을 제공 할 수 있으므로 목록 순서에 대한 변경 사항을 SavedPreferences로 업데이트 할 수 있습니다 (ListView가이를 처리하지 않기 때문에).

TouchInterceptor 클래스를 쉽게 확장 또는 수정할 수 있으므로 저수준 항목이 모두 포함되어 있으므로 추가 기능을 추가 할 수 있습니다.

+0

맞아, 나는 내가 어딘가에서 그것을 본 것을 알고 있었다. 왜 내가 이것을 생각하지 않았는가? 이상하게도 [docs] (http://developer.android.com/guide/topics/ui/drag-drop.html)와 같은 드래그 앤 드롭 이벤트를 사용하지 않습니다. 어쨌든, 나는 이것을 혼자 할 수 없었습니다. 고마워, 나는 그것을 시도하고 다시 당신에게 돌아갈거야. – jadkik94

+0

드래그 앤 드롭 API가 API 레벨 11에 추가되었으며이 구현은 API 레벨 8을 대상으로하므로 API가 완료되거나 널리 사용되기 전에 작성되었을 가능성이 큽니다. – Victor

+0

그럴 수도 있습니다. TouchInterceptor 클래스가 MusicPicker.java에서 사용 되었습니까? 그 클래스는 거기에서 가져 오거나 사용되지 않습니다. – jadkik94

관련 문제