昨天,测试人员提了一个Bug,说是只要来回的点击同一个Tab按钮,加载的数据就会重复,检查代码检查了好长时间也没有发现有啥问题,于是就打断点调试,发现本来是执行的pullToRefreshListView.setRefreshing(); 自以为是执行的刷新操作(其实也就是刷新操作,只不过上拉是刷新,下拉也是刷新,我们做的时候是把上拉刷新改成加载更多了),其实该控件并不能判断出来目前执行的操作是下拉刷新还是上拉加载更多,这就需要自定义一个布尔变量isAutoRefresh,通过它来识别是不是下拉刷新的动作,下面给出实现的源码:
public class MyTopicFragment extends Fragment implements MyTopicObserver,
OnItemClickListener, OnRefreshListener<ListView>,
OnLastItemVisibleListener {
private int mType = 0;
private PullToRefreshListView pullToRefreshListView;
private ListView actualListView;
private MyTopicListAdapter myTopicListAdapter;
private Context mContext;
private MyTopicLogic logic;
private int currentPageCount = 0; // 记录当前为第几页
private int totalPageCount; // 记录总页数
private boolean isRefreshAction;// 标志是否是下拉刷新
private MyTopicEntity mMyTopicEntity;
private LinearLayout promptView;// 无任何话题的时候显示的提示语
private LinearLayout mLoadingHint = null;
private LinearLayout mAfterLodingHint = null;
private ImageView mHintImage = null;
private TextView mHintTxt = null;
private boolean isAutoRefresh = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Bundle args = this.getArguments();
mType = args.getInt("type");
mContext = this.getActivity();
logic = new MyTopicLogic();
logic.addObserver(this);
View rootView = inflater.inflate(
R.layout.fragment_pulltorefresh_listview, container, false);
initialize(rootView);
return rootView;
}
private void initialize(View rootView) {
pullToRefreshListView = (PullToRefreshListView) rootView
.findViewById(R.id.fragment_pulltorefresh_listview);
myTopicListAdapter = new MyTopicListAdapter();
actualListView = pullToRefreshListView.getRefreshableView();
registerForContextMenu(actualListView);
actualListView.setAdapter(myTopicListAdapter);
pullToRefreshListView.setMode(Mode.BOTH);
pullToRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel(
getString(R.string.poll_refresh_down_loadmore));
pullToRefreshListView.getLoadingLayoutProxy(false, true)
.setRefreshingLabel(
getString(R.string.poll_refresh_down_refreshing));
pullToRefreshListView.getLoadingLay