Android 结合PullToRefresh和SwipeListView库时出现了一些错误

Android 结合PullToRefresh和SwipeListView库时出现了一些错误,android,listview,swipe,pull-to-refresh,Android,Listview,Swipe,Pull To Refresh,我有一个列表,可以同时实现(旧的)和库 我将继续合并这些库并在活动中使用它 我的列表可以执行一些基本功能,如上拉/下拉和左/右滑动,但我遇到了一些错误: 我的listview中的项目位置总是从1开始,我认为它应该从0开始,所以我需要在我的方法中减少它 当我刷一个项目(比如第一个项目)时,第五个项目将被刷到。因此,索引+4项也将被刷取 我用于初始化对象的代码: private PullToRefreshSwipeListView ptrListView; private SwipeListView

我有一个列表,可以同时实现(旧的)和库

我将继续合并这些库并在
活动中使用它

我的列表可以执行一些基本功能,如上拉/下拉和左/右滑动,但我遇到了一些错误:

  • 我的listview中的项目位置总是从1开始,我认为它应该从0开始,所以我需要在我的方法中减少它
  • 当我刷一个项目(比如第一个项目)时,第五个项目将被刷到。因此,索引+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
    
                }
    
            });
    
    private PullToRefreshSwipeListView ptrListView;
    私有SwipeListView结果列表视图;
    resultListView=ptrListView.getRefreshableView();
    ptrListView.setOnRefreshListener(新的OnRefreshListener2(){
    @凌驾
    PullDownToRefresh(PullToRefreshBase refreshView)上的公共无效{
    //TODO自动生成的方法存根
    }
    @凌驾
    PullUptoRefresh(PullToRefreshBase refreshView)上的公共无效{
    //TODO自动生成的方法存根
    }
    });
    
    这是我用来初始化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);
        }
    
    private void setListview(){
    adapter=new LibraryAdapter(此,R.layout.item_library_列表,new ArrayList(),resultListView);
    setListener(新的libraryListener(){
    //设置适配器
    });
    resultListView.setSwipeListViewListener(新的BaseSwipeListViewListener(){
    //位置di-1 karena sejak gabung library swipelistview+pulltorefresh,位置slalu kelebihan 1和menyebabkan出站错误。
    @凌驾
    公共视图(最终整型位置){
    //在这里做点什么
    }
    @凌驾
    打开公共无效(内部位置,布尔值为右侧){
    //TODO自动生成的方法存根
    超级开启(位置1,右侧);
    lastPos=位置-1;
    }
    @凌驾
    移动时公共无效(内部位置,浮动x){
    //TODO自动生成的方法存根
    超级移动(位置-1,x);
    }
    @凌驾
    公共int ONCHANGSWIPMODE(int位置){
    //TODO自动生成的方法存根
    返回SwipeListView.SWIPE\u模式\u默认值;
    }
    @凌驾
    公共void onStartOpen(整数位置、整数动作、布尔右键){
    //TODO自动生成的方法存根
    super.onStartOpen(位置1,动作,右侧);
    }
    });
    resultListView.setOnItemLongClickListener(新的OnItemLongClickListener(){
    @凌驾
    公共布尔值长单击(适配器查看适配器,视图arg1,
    最终整数位置,长arg3){
    //在这里做点什么
    }
    });
    ptrListView.setAdapter(适配器);
    ptrListView.setLongClickable(true);
    resultListView.setSwipeOpenOnLongPress(假);
    }
    
    这是我的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)是标题

    int _index = index -  listView.getHeaderViewsCount();
    
    我从来没有遇到过你的第二个问题。您可以尝试以下方法来解决触摸问题:

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

    希望获得此帮助

    为了解决问题2,只需将这两个覆盖功能添加到适配器:

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

    谢谢,我会试试这个:我不知道第二个代码放在哪里,而且我找不到listView.getRefreshableView().getTouchListener()。你能把你的密码告诉我吗?我想我错过了一些小东西,但我找不到。我的电子邮件:blazetamareborn@gmail.com谢谢:DgetTouchListener()返回SwipeListView的touchListener,也许我在SwipeListView.java中将此方法修改为public。我把这个方法放在listview启动之后。是的,它现在可以工作了。稍后我会把我的代码放在你的答案中,这样人们会更好地理解。非常感谢您的帮助:您可以在这里发布您的代码。我得到了空指针。严重建议不要使用此解决方案。它违背了listview的主要目的之一。(行回收)相反,在将行绑定到数据时只需重置状态。您有更好的解决方案吗?