2013-09-03 10 views
6

में OnItemLongClickListener से ड्रैग-सॉर्ट-लिस्टव्यू को सक्षम करते समय मैं सूचीफ्रेगमेंट में ड्रैग-सॉर्ट-लिस्टव्यू (https://github.com/bauerca/drag-sort-listview) का उपयोग कर रहा हूं।NullPointerException एक सूचीदृश्य

जब मैं सृजन पर ड्रैगॉर्ट सक्षम करता हूं तो चीजें काम कर रही हैं। हालांकि, मैं इसे सूचीदृश्य में से किसी एक आइटम पर एक लंबी अवधि तक अक्षम कर देना चाहता हूं।

तो मैं 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; 
      } 
     }); 

मेरी आशा है कि किसी भी आइटम पर एक लंबा क्लिक डीएसएलवी चालू हो जाएगा और उस आइटम को गिराया या हटा दिया जाएगा, जिसके बाद डीएसएलवी फिर से अक्षम कर दिया जाएगा।

हालांकि, के बाद (जब नहीं) 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) 

किसी को भी इस की कोशिश की है? कोई विचार? ऐसा लगता है कि गति घटनाओं में से एक न्यूल है, शायद इसलिए कि मैं एक स्पर्श घटना के दौरान डीएसएलवी सक्षम कर रहा हूं।

उत्तर

1

मैं एक ही मुद्दा मार रहा हूं - क्या आप इस पर काम करने में सक्षम थे?

एक समाधान जो मैंने ड्रैग हैंडलर को सूची दृश्य आइटम पर शुरू करने के लिए शुरू किया था - इस तरह उपयोगकर्ता सॉर्ट करने के लिए खींच नहीं सकता है। जब लंबी प्रेस ट्रिगर्स होती है, तो ड्रैग हैंडलर की दृश्यता को दृश्यमान पर सेट करें। हालांकि यहां एक समस्या यह है कि जब आप लंबे समय तक दबाकर आइटम को डि-सिलेक्ट करते हैं, भले ही आप ड्रैग हैंडलर को फिर से गोन में सेट करते हैं, तब भी उपयोगकर्ता उस स्थिति को दबाकर सॉर्ट कर सकता है जहां हैंडलर होता था।

0

आप अपने लेआउट एक्सएमएल में "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" 
    /> 
संबंधित मुद्दे