2015-04-22 2 views
0

Я следую за this библиотекой, чтобы добавить функцию перетаскивания моего списка. Все хорошо, когда перемещение первого предмета на второе место. Но когда я перемещаю первый элемент списка в третье место, происходит сбой приложений. Чтобы объяснить свою ситуацию, я добавил изображение. Все, что я думаю, это вызвано в строке Swap items, но я думаю, что мой код прав. Когда я пытаюсь заменить первый элемент на третий элемент, приложение рушится. Любая помощь будет для меня ценной. Спасибо за помощь.Элементы Drag Drop and Reorder в ListView

enter image description here

Вот мой адаптер код.

public class NavigationDrawerListViewAdapter extends BaseAdapter implements Communicator,Swappable{ 

    private LayoutInflater mInflater; 
    public ArrayList<NavigationDrawerFragment.ListItem> myItems; 



    public NavigationDrawerListViewAdapter(Context activity, ArrayList<NavigationDrawerFragment.ListItem> listItemElements) { 
     mInflater = (LayoutInflater) activity.getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 
     myItems = listItemElements; 

    } 


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

    @Override 
    public NavigationDrawerFragment.ListItem getItem(int position) { 
     return myItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return myItems.get(position).hashCode(); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     View v = convertView; 
     final ViewHolder holder; 
     final NavigationDrawerFragment.ListItem i = myItems.get(position); 
     if (i != null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.navigation_drawer_listview_simple, null); 
       holder.text = (TextView) convertView.findViewById(R.id.textView123); 
       holder.text.setText(i.textdata); 
       convertView.setTag(holder); 
       parent.setTag(holder); 
       holder.text.setTag(position); 


     } 
     return convertView; 
    } 

    @Override 
    public void respond(String name) { 

    } 

    @Override 
    public void sendData(String url, String type) { 

    } 

    @Override 
    public void sendMapValues(Geometry featureGeometry, Symbol featureSymbol, Object featureAttrValues) { 
      //doinNothing 
    } 

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

     NavigationDrawerFragment.ListItem obj1 = myItems.get(i); 
     myItems.remove(i); 
     myItems.add(i2,obj1); 
     this.notifyDataSetChanged(); 

    } 


    class ViewHolder { 
     TextView text; 
    } 

} 
+1

Сбой приложения, пожалуйста, покажите сообщения об ошибках logcat. Это поможет нам увидеть стек. –

ответ

2

Я думаю, что ваш код продолжает добавлять первый элемент во вторую позицию, но второй элемент удаляется. Это происходит внутри ArrayList, а не в графическом интерфейсе.

Предлагаю технику, которая просто заменяет два элемента, базовую замену с использованием временного объекта. На этот раз temp является obj1. Пример кода с помощью стиля:

public void swapItems(int i, int i2) { 
    NavigationDrawerFragment.ListItem obj1 = myItems.get(i); 
    myItems.set(i, myItems.get(i2); 
    myItems.set(i2, obj1); 
} 

Примечание: Я использую ArrayList установить метод вместо дополнения().