Android 拖动并排序Listview和McClick问题

Android 拖动并排序Listview和McClick问题,android,android-layout,android-intent,android-widget,android-listview,Android,Android Layout,Android Intent,Android Widget,Android Listview,我正在使用拖放排序listview来单击某个项目,但问题是当我对该项目进行排序时,位置会发生变化。如何解决此问题。我使用了此示例。我的编码如下: 使用DragNDropListView的Java类 ListView listView = getListView(); listView.setOnItemClickListener(this); if (listView instanceof DragNDropListView) { ((DragNDropL

我正在使用拖放排序listview来单击某个项目,但问题是当我对该项目进行排序时,位置会发生变化。如何解决此问题。我使用了此示例。我的编码如下:

使用DragNDropListView的Java类

ListView listView = getListView();

    listView.setOnItemClickListener(this);



    if (listView instanceof DragNDropListView) {
        ((DragNDropListView) listView).setDropListener(mDropListener);
        ((DragNDropListView) listView).setRemoveListener(mRemoveListener);
        ((DragNDropListView) listView).setDragListener(mDragListener);

    }
}

private DropListener mDropListener = 
    new DropListener() {
    public void onDrop(int from, int to) {
        ListAdapter adapter = getListAdapter();
        if (adapter instanceof DragNDropAdapter) {
            ((DragNDropAdapter)adapter).onDrop(from, to);
            getListView().invalidateViews();
        }
    }
};

private RemoveListener mRemoveListener =
    new RemoveListener() {
    public void onRemove(int which) {
        ListAdapter adapter = getListAdapter();
        if (adapter instanceof DragNDropAdapter) {
            ((DragNDropAdapter)adapter).onRemove(which);
            getListView().invalidateViews();
        }
    }
};

private DragListener mDragListener =
    new DragListener() {

    int backgroundColor = 0xe0103010;
    int defaultBackgroundColor;

        public void onDrag(int x, int y, ListView listView) {
            // TODO Auto-generated method stub
        }

        public void onStartDrag(View itemView) {
            itemView.setVisibility(View.VISIBLE);
            defaultBackgroundColor = itemView.getDrawingCacheBackgroundColor();
            itemView.setBackgroundColor(backgroundColor);
            ImageView iv = (ImageView)itemView.findViewById(R.id.ImageView01);
            if (iv != null) iv.setVisibility(View.VISIBLE);
        }

        public void onStopDrag(View itemView) {
            itemView.setVisibility(View.VISIBLE);
            itemView.setBackgroundColor(defaultBackgroundColor);
            ImageView iv = (ImageView)itemView.findViewById(R.id.ImageView01);
            if (iv != null) iv.setVisibility(View.VISIBLE);
        }

};

private static String[] mListContent={"Item 1", "Item 2", "Item 3"};

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
    // TODO Auto-generated method stub
    if(position==0)
    {
        Toast.makeText(this, "You have selected item 1",Toast.LENGTH_SHORT)
        .show();
    }

    if(position==1)
    {
        Toast.makeText(this, "Item 2",Toast.LENGTH_SHORT)
        .show();
    }

    if(position==2)
    {
    Intent i=new Intent(a.this,b.class);
           startActivity(i);
    }
ListView ListView=getListView();
setOnItemClickListener(this);
if(DragNDropListView的listView实例){
((DragNDropListView)listView);
((DragNDropListView)列表视图);
((DragNDropListView)listView.setDragListener(mDragListener);
}
}
专用DropListener mDropListener=
新的DropListener(){
公共无效onDrop(整数从,整数到){
ListAdapter=getListAdapter();
if(DragNDropAdapter的适配器实例){
((DragNDropAdapter)适配器).onDrop(从,到);
getListView().invalidateViews();
}
}
};
私有RemoveListener mrRemovelistener=
新的RemoveListener(){
移除时的公共void(int-which){
ListAdapter=getListAdapter();
if(DragNDropAdapter的适配器实例){
((DragNDropAdapter)适配器).onRemove(哪个);
getListView().invalidateViews();
}
}
};
专用DragListener mDragListener=
新DragListener(){
int backgroundColor=0xe0103010;
背景色;
public void onDrag(int x,int y,ListView ListView){
//TODO自动生成的方法存根
}
开始拖动时的公共void(视图项视图){
itemView.setVisibility(View.VISIBLE);
defaultBackgroundColor=itemView.getDrawingCacheBackgroundColor();
itemView.setBackgroundColor(背景色);
ImageView iv=(ImageView)itemView.findViewById(R.id.ImageView01);
如果(iv!=null)iv.setVisibility(View.VISIBLE);
}
公共无效onStopDrag(视图项视图){
itemView.setVisibility(View.VISIBLE);
itemView.setBackgroundColor(defaultBackgroundColor);
ImageView iv=(ImageView)itemView.findViewById(R.id.ImageView01);
如果(iv!=null)iv.setVisibility(View.VISIBLE);
}
};
私有静态字符串[]mListContent={“项目1”、“项目2”、“项目3”};
@凌驾
public void onItemClick(适配器视图arg0、视图arg1、内部位置、长arg3){
//TODO自动生成的方法存根
如果(位置==0)
{
Toast.makeText(此“您已选择项目1”,Toast.LENGTH\u SHORT)
.show();
}
如果(位置==1)
{
Toast.makeText(此“项目2”,Toast.LENGTH\u SHORT)
.show();
}
如果(位置==2)
{
意向i=新意向(a.本,b.类);
星触觉(i);
}
但在排序时,位置肯定会有所不同,所以我不能使用意图传递给下一个

如何在拖动和排序列表视图中纠正此问题


提前感谢。

您必须检查DropListener中的位置,如下所示:

private int position = 0;

private DropListener mDropListener = new DropListener() {
            public void onDrop(int from, int to) {
                ListAdapter adapter = listView.getAdapter();
                if (adapter instanceof DragNDropAdapter) {
                    ((DragNDropAdapter) adapter).onDrop(from, to);
                    listView.invalidateViews();
                    if(position == from)
                        position = to;
                    else if(position == to && ((from - to) == 1 || (to - from) == 1))
                        position = from;
                    else if(position == to && (from - to) > 1)
                        position = (from - to)-1;
                    else if(position == to && (to - from) > 1)
                        position = (to - from)-1;
                    else if(position > from && position < to)
                        position -= 1;
                    else if(position < from && position >to)
                        position += 1;

                }
            }
        };
private int position=0;
私有DropListener mDropListener=新的DropListener(){
公共无效onDrop(整数从,整数到){
ListAdapter=listView.getAdapter();
if(DragNDropAdapter的适配器实例){
((DragNDropAdapter)适配器).onDrop(从,到);
listView.invalidateViews();
如果(位置==从)
位置=到;
else if(位置==to&((从-to)==1 | |(从-to)==1))
位置=起始位置;
如果(位置==到&&(从-到)>1,则为else
位置=(从-到)-1;
如果(位置==到&&(到-从)>1,则为else
位置=(到-从)-1;
否则如果(位置>起始位置和位置<至)
位置-=1;
else if(位置to)
位置+=1;
}
}
};

你能告诉我问题出在哪里吗?正如你所说,我已经在DropListener中添加了这个并运行了它。但我仍然有问题。想在OnItemClickListener中做任何更改吗?因为我使用的是listview.setOnItemClickListener(这个);因此它覆盖了AdapterView。我的疑问是,该位置将检查DropListener?因此只有我认为我面临这个问题。首先告诉我这些项目在listview中可见,或者您在向其中添加项目时遇到问题?项目在listview dude中可见。当我单击它时,它会显示相应项目的toast消息。但当我排序并单击它,它不匹配。您正在从数据库中拾取项目?在何处和何时进行排序?