2014-02-14 2 views
2

У меня есть список, который реализует как PullToRefresh (старый), так и SwipeListView.возникли некоторые ошибки при объединении библиотеки PullToRefresh и SwipeListView

Im последующий this для объединения библиотеки и this для использования в Activity.

Мой список может сделать некоторые основные функциональные возможности, такие как подтяжка/PullDown и проведите пальцем влево/вправо, но я столкнулся с какой-то ошибка:

  1. Положение элемента в моей ListView всегда начинается с 1, я считаю, что должна быть начата от 0, поэтому мне нужно уменьшить его в моих методах.
  2. Когда я прокручиваю предмет (скажем, первый элемент), элемент 5-го пункта будет выбит. Таким образом, элемент index + 4 также будет прокручен.

Код я использовал для инициализации объектов:

private PullToRefreshSwipeListView ptrListView; 
private SwipeListView resultListView; 

resultListView = ptrListView.getRefreshableView(); 
     ptrListView.setOnRefreshListener(new OnRefreshListener2<SwipeListView>() { 

      @Override 
      public void onPullDownToRefresh(PullToRefreshBase<SwipeListView> refreshView) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onPullUpToRefresh(PullToRefreshBase<SwipeListView> refreshView) { 
       // TODO Auto-generated method stub 

      } 

     }); 

Это метод, который я использовал для инициализации ListView:

private void setListview() { 
     adapter = new LibraryAdapter(this, R.layout.item_library_list, new ArrayList<PurchasedItem>(), resultListView); 
     adapter.setListener(new LibraryListListener() { 
      //set the adapter 

     }); 

     resultListView.setSwipeListViewListener(new BaseSwipeListViewListener() { 
      //position di -1 karena sejak gabung library swipelistview + pulltorefresh, position slalu kelebihan 1 & menyebabkan OutOfBound error. 

      @Override 
      public void onClickFrontView(final int position) { 
       //do something here 
      } 

      @Override 
      public void onOpened(int position, boolean toRight) { 
       // TODO Auto-generated method stub 
       super.onOpened(position-1, toRight); 
       lastPos = position-1; 
      } 

      @Override 
      public void onMove(int position, float x) { 
       // TODO Auto-generated method stub 
       super.onMove(position-1, x); 
      } 

      @Override 
      public int onChangeSwipeMode(int position) { 
       // TODO Auto-generated method stub 
          return SwipeListView.SWIPE_MODE_DEFAULT; 
      } 

      @Override 
      public void onStartOpen(int position, int action, boolean right) { 
       // TODO Auto-generated method stub 
       super.onStartOpen(position-1, action, right); 

      } 

     }); 

     resultListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> adapter, View arg1, 
        final int pos, long arg3) { 
       //do something here 

      } 
     }); 

     ptrListView.setAdapter(adapter); 
     ptrListView.setLongClickable(true); 
     resultListView.setSwipeOpenOnLongPress(false); 
    } 

И это мой XML:

<com.handmark.pulltorefresh.library.PullToRefreshSwipeListView 
     xmlns:swipe="http://schemas.android.com/apk/res-auto" 
     xmlns:ptr="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/transparent" 
     android:cacheColorHint="@android:color/transparent" 
     android:divider="@drawable/line_separator_repeat" 
     android:listSelector="#00000000" 
     ptr:ptrMode="pullFromEnd" 
     swipe:swipeActionLeft="reveal" 
     swipe:swipeBackView="@+id/back" 
     swipe:swipeCloseAllItemsWhenMoveList="true" 
     swipe:swipeFrontView="@+id/front" 
     swipe:swipeMode="both" /> 

Просьба помочь, любая помощь приветствуется. Спасибо

+0

Вы можете разместить свой код здесь. Я получаю нулевой указатель. – kyogs

ответ

1

У меня была такая же первая проблема, как и вы. Я думаю, что первый элемент (индекс 0) - это заголовок.

int _index = index - listView.getHeaderViewsCount(); 

Я никогда не встречал вашу вторую проблему. Вы можете попробовать это решить трогательные проблемы:

listView.setOnScrollListener(listView.getRefreshableView().getTouchListener().makeScrollListener()); 

Надежда эта помощь

+0

Спасибо, я попробую это: D –

+0

Я не понимаю, куда положить второй код, и я не нашел listView.getRefreshableView(). GetTouchListener(). Вы можете поделиться своим кодом со мной? Кажется, я пропустил что-то маленькое, но я не могу найти его. Мой адрес электронной почты: [email protected] Спасибо: D –

+0

getTouchListener() возвращает touchListener из SwipeListView, возможно, я модифицировал этот метод для публики в SwipeListView.java. Я поместил этот метод после инициации listview. –

0

Для того, чтобы исправить проблемы нет. 2, просто добавьте эти функции переопределения к вашему адаптеру:

@Override 
    public int getItemViewType(int position) { 
     return position; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 500; 
    } 
+0

Настоятельно рекомендуем использовать это решение. Это побеждает одну из главных целей списка. (переработка строк) Скорее просто сбросьте состояние при привязке строки к вашим данным. –

+0

У вас есть лучшее решение? – NPC

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