0

Я использую перетаскивание и сортировку списка, где я хочу щелкнуть элемент, но проблема в том, что когда я сортирую элемент, позиция изменяется. Как решить эту проблему. Я использовал этот пример , https://github.com/commonsguy/cwac-touchlist. Мое кодирование следующим образом:Перетаскивание и сортировка Listview OnItemНазад проблемы android

класса Java Использование DragNDropListView

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); 
    } 

Но при сортировке, конечно, положение меняется, так что я не мог использовать намерение перейти к следующему

activity.How, чтобы исправить это в перетащить и отсортировать список?

Заранее спасибо.

+0

Где и когда ваш разбирают? –

ответ

0

Вы должны проверить положение в 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; 

       } 
      } 
     }; 
+0

Я добавил это и попытался, но все же я столкнулся с проблемой. – Shadow

+0

Можете ли вы сказать мне, что и где проблема? – user1744952

+0

Как я сказал, я добавил это в DropListener и запустил его. Но все-таки у меня проблема. Хочешь сделать какие-либо изменения в OnItemClickListener? Потому что я использую listview.setOnItemClickListener (это); поэтому он переопределяет AdapterView.My сомневаюсь, что эта позиция проверит DropListener? Так что только я думаю, что я столкнулся с проблемой. – Shadow

Смежные вопросы