2013-09-03 8 views
6

ListFragment에 drag-sort-listview (https://github.com/bauerca/drag-sort-listview)를 사용하고 있습니다.ListView의 OnItemLongClickListener에서 drag-sort-listview를 활성화 할 때 NullPointerException이 발생했습니다.

생성시 끌어서 놓기를 사용 가능하게하면 모든 것이 작동합니다. 그러나 목록보기에서 항목 중 하나를 longclick 때까지 사용하지 않도록 설정하고 싶습니다.

그래서 3 곳에서

mDslv.setDragEnabled(false); 

을 설정하려는 : onCreateView(), DragSortListView.DropListener 및 DragSortListView.RemoveListener

을 내 ListFragment, 나는이 :

 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ 
      @Override 
      public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) { 
       mDslv.setDragEnabled(true); 
       return true; 
      } 
     }); 

내 희망은 모든 항목을 길게 클릭하면 DSLV가 켜지고 해당 항목이 떨어지거나 제거되도록 허용 한 후 DSLV가 다시 사용 중지됩니다. (동안이되지 않음) (TRUE)을 setDrageEnabled를 호출, 내가 NullPointerException이 얻을 후

그러나 :

09-03 00:03:33.749: E/AndroidRuntime(9703): FATAL EXCEPTION: main 
09-03 00:03:33.749: E/AndroidRuntime(9703): java.lang.NullPointerException 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at com.mobeta.android.dslv.DragSortController.onScroll(DragSortController.java:381) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.GestureDetector.onTouchEvent(GestureDetector.java:541) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at com.mobeta.android.dslv.DragSortController.onTouch(DragSortController.java:243) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.View.dispatchTouchEvent(View.java:3881) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1703) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1133) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.app.Activity.dispatchTouchEvent(Activity.java:2096) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1687) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2196) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1880) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.os.Looper.loop(Looper.java:130) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at android.app.ActivityThread.main(ActivityThread.java:3729) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) 
09-03 00:03:33.749: E/AndroidRuntime(9703):  at dalvik.system.NativeStart.main(Native Method) 

사람이 시도 했습니까? 어떤 아이디어? 모션 이벤트 중 하나가 NULL 인 것처럼 보입니다. 아마도 터치 이벤트 중 DSLV를 활성화하기 때문입니다.

답변

1

동일한 문제가 발생합니다. 문제를 해결할 수 있었습니까?

내가 가진 한 가지 해결책은 목록보기 항목의 드래그 핸들러를 처음에 GONE으로 설정하는 것이 었습니다. 이렇게하면 사용자는 드래그하여 정렬 할 수 없습니다. 긴 누르기가 트리거되면 끌기 핸들러의 가시성을 VISIBLE로 설정하십시오. 그러나 여기에 문제가 발생하면 길게 눌러 항목을 선택 취소 할 때 끌기 핸들러를 다시 GONE으로 설정하더라도 사용자는 이전에 핸들러가 있던 위치를 눌러 정렬을 끌 수 있습니다.

0

레이아웃 XML에서 "dslv : drag_start_mode"속성을 사용할 수 있습니다. 은 다음과 같습니다.

<com.mobeta.android.dslv.DragSortListView 
    xmlns:dslv="http://schemas.android.com/apk/res/com.yourdomain.test" 
    android:id="@+id/custom_ticker_list" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:dividerHeight="1dp" 
    android:childDivider="@color/line" 
    dslv:drag_start_mode="onLongPress" 
    /> 
관련 문제