2015-02-06 37 views
2

嗨,我想要使用拖放在我的ListView为此,我发现Nhaarman代码为简单的拖放ListView。但是,当我使用它我收到此错误信息:使用nhaarman拖放Listview在Android中使用nhaarman

java.lang.NullPointerException 
      at android.widget.AdapterView.getPositionForView(AdapterView.java:591) 
      at com.nhaarman.listviewanimations.itemmanipulation.dragdrop.DynamicListViewWrapper.getPositionForView(DynamicListViewWrapper.java:59) 
      at com.nhaarman.listviewanimations.itemmanipulation.dragdrop.DragAndDropHandler.switchViews(DragAndDropHandler.java:431) 
      at com.nhaarman.listviewanimations.itemmanipulation.dragdrop.DragAndDropHandler.switchIfNecessary(DragAndDropHandler.java:408) 
      at com.nhaarman.listviewanimations.itemmanipulation.dragdrop.DragAndDropHandler.handleMoveEvent(DragAndDropHandler.java:381) 
      at com.nhaarman.listviewanimations.itemmanipulation.dragdrop.DragAndDropHandler.onTouchEvent(DragAndDropHandler.java:278) 
      at com.nhaarman.listviewanimations.itemmanipulation.DynamicListView.onTouchEvent(DynamicListView.java:279) 
      at com.nhaarman.listviewanimations.itemmanipulation.DynamicListView.dispatchTouchEvent(DynamicListView.java:272) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2070) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1746) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2070) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1746) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2070) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1746) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2070) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1746) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1961) 
      at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1398) 
      at android.app.Activity.dispatchTouchEvent(Activity.java:2428) 
      at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:255) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1909) 
      at android.view.View.dispatchPointerEvent(View.java:5748) 
      at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3165) 
      at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2719) 
      at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:951) 
      at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2733) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:156) 
      at android.app.ActivityThread.main(ActivityThread.java:4987) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
      at dalvik.system.NativeStart.main(Native Method)  

我不知道究竟是我的问题,但我认为getitemgetitemid方法有问题。

我的代码是:

pagelist=(DynamicListView) findViewById(R.id.listpages); 
     PagesListAdapter adapter=new PagesListAdapter(getApplicationContext()); 
     AlphaInAnimationAdapter animationAdapter=new AlphaInAnimationAdapter(adapter); 
     animationAdapter.setAbsListView(pagelist); 
     pagelist.setAdapter(animationAdapter); 
     pagelist.enableDragAndDrop(); 
     pagelist.setDraggableManager(new TouchViewDraggableManager(R.id.list_row_draganddrop_touchview)); 
     pagelist.setOnItemMovedListener(new MyOnItemMovedListener(adapter)); 
     pagelist.setOnItemLongClickListener(new MyOnItemLongClickListener(pagelist));  

而且我的适配器是:

public class PagesListAdapter extends BaseAdapter implements Swappable { 
Context context; 
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); 



public PagesListAdapter(Context context){ 

    this.context=context; 
    for(int s=0;s<MainActivity.names.size();s++){ 
     mIdMap.put(MainActivity.names.get(s).get(0).name,s); 

    } 

} 

@Override 
public int getCount() { 
    return MainActivity.names.size(); 
} 

@Override 
public Object getItem(int position) { 
    return MainActivity.names.get(position).get(0).name; 
} 



@Override 
public long getItemId(final int position) { 
    return getItem(position).hashCode(); 
} 

@Override 
public boolean hasStableIds() { 
    return true; 
} 

LayoutInflater inflater; 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView=inflater.inflate(R.layout.item_pageslist,parent,false); 
    TextView pagename=(TextView) convertView.findViewById(R.id.pagename); 
    pagename.setText(MainActivity.allapps.get(position).get(0).name); 


    return convertView; 
} 

@Override 
public void swapItems(int i, int i2) { 

} 
}  

谁能说我失踪了?感谢您的任何帮助

+0

我有同样的问题 – 2015-05-19 09:39:19

回答

0

我发现DynamicListView试图获取它的子视图中的“拖动”视图的位置索引,并且当您拖放&时,视图不断刷新。因此,它会调用适配器的getView,并且每当您重新使用视图而不重新使用视图时,会创建一个与原始“拖动”视图不同的“拖动”视图的新视图。因此,DynamicListView无法确定原始“拖动”视图的位置。

我认为你可以通过在getView方法中重用View来解决这个问题。

+0

请问您能否显示一个代码?我无法找到修复错误的地方。 – CoolMind 2015-11-25 13:40:38

+0

@CoolMind简单地通过使用ViewHolder模式来避免再次膨胀 – 2015-11-25 15:34:42

+0

谢谢。我认为这是该库代码中的一个错误。会看得更深。 – CoolMind 2015-11-25 15:38:14