使用nhaarman在Android中拖放Listview

使用nhaarman在Android中拖放Listview,android,listview,drag-and-drop,Android,Listview,Drag And Drop,您好,我想在我的列表视图中使用拖放功能,为此,我找到了一个简单拖放列表视图的nHarman代码。但当我使用它时,我会收到以下错误消息: java.lang.NullPointerException at android.widget.AdapterView.getPositionForView(AdapterView.java:591) at com.nhaarman.listviewanimations.itemmanipulation.drag

您好,我想在我的
列表视图中使用拖放功能,为此,我找到了一个简单拖放
列表视图的nHarman代码。但当我使用它时,我会收到以下错误消息:

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)     
我不知道我到底有什么问题,但我认为
getitem
getitemid
方法是问题所在

我的代码是:

 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) {

}
}    
公共类PagesListAdapter扩展BaseAdapter实现可交换{
语境;
HashMap mIdMap=新的HashMap();
公共页面静态适配器(上下文){
this.context=context;

对于(int s=0;s我发现DynamicListView试图在其子视图中获取“拖动”视图的位置索引,并且在拖放时视图不断刷新。因此,它调用适配器的getView,当您每次膨胀视图而不重用视图时,会为“拖动”创建一个新视图创建的视图与原始“拖动”视图不同。因此,DynamicListView无法确定原始“拖动”视图的位置


我想你可以通过重用getView方法中的视图来解决这个问题。

我也有同样的问题。请你显示一个代码好吗?我找不到修复错误的地方。@CoolMind只需使用ViewHolder模式来重用视图,以避免再次膨胀。我还以为这是该库代码中的一个错误。我们将进一步了解。