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的主要目的之一。(行回收)相反,在将行绑定到数据时只需重置状态。您有更好的解决方案吗?