PagingListView显示数据

来源:互联网 发布:java四大特性 编辑:程序博客网 时间:2024/06/16 08:20

解决过程:
刚开始使用的是ListView方法,采用setScrollListener的方法, 去监听ListView的滚动事件,实现向下翻页,请求下一页的数据,后来发现这种方式翻页不稳定,且容易出现连翻几页的现象,PagingListView很好的解决了这个问题。注意要用addData,而不是replaceData方法,这样才能实现往回翻页。一般情况下,listView加载更多数据,不会因为数据过多而出现crash的现象。

xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="70dp"        android:orientation="horizontal"        android:background="@color/footprint_text_light_gray"        android:layout_gravity="center_vertical">        <TextView            android:id="@+id/tradeInfoTitle"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:textSize="15dp"            android:layout_marginTop="25dp"            android:layout_marginLeft="20dp"            android:text="全部订单"            android:layout_alignParentLeft="true"/>        <RelativeLayout            android:id="@+id/trade_info_search_view"            android:layout_width="300dp"            android:layout_height="45dp"            android:layout_gravity="center_vertical"            android:background="@drawable/shop_search_view_bg"            android:layout_marginRight="20dp"            android:layout_marginTop="10dp"            android:layout_alignParentRight="true">            <com.tmall.mobile.pad.widget.mui.IconFontTextView                android:id="@+id/trade_info_search_icon"                android:layout_width="wrap_content"                android:layout_height="match_parent"                android:layout_alignParentLeft="true"                android:layout_marginLeft="10dp"                android:layout_marginRight="6dp"                android:gravity="center_vertical"                android:paddingBottom="0dp"                android:paddingTop="0dp"                android:text="@string/iconfont_sousuo"                android:textColor="#5F646E"                android:textSize="24dp" />            <SearchView                android:id="@+id/trade_info_search_control"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:layout_toRightOf="@id/trade_info_search_icon"                android:iconifiedByDefault="false"                android:inputType="textFilter"                android:queryHint="@string/trade_search_bar_hint_text"/>        </RelativeLayout>    </RelativeLayout>    <com.tmall.mobile.pagingview.PagingListView        android:id="@+id/tradeInfoListView"        android:listSelector="@android:color/transparent"        android:divider="@color/tm_detail_divider"        android:dividerHeight="@dimen/tm_detail_divider_height"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="@color/White" />    <LinearLayout        android:id="@+id/order_empty_container"        android:layout_height="wrap_content"        android:layout_width="wrap_content"        android:layout_marginTop="220dp"        android:orientation="vertical"        android:layout_gravity="center_horizontal"        /></LinearLayout>

class:

public class OrderInfoListFragment extends TMBaseFragment implements PagingListener {    public static final String TAG = "OrderInfoListFragment";    private String mTitleName;    private PagingListView tradeInfoListView;    private TextView titleView;    private SearchView searchView;    private OrderInfoListAdapter mOrderInfoListAdapter;    private static final int REQ_CODE_QUERY_ORDER_LIST = 0x00;    private String mEventId = "all";    List<MtopOrderQueryOrderListResponseDataBoughtListCell> mCell;    private Context context;    private OrderEngine mOrderEngine;    private BasicInfo mEventInfo;    private String mCondition;    private PageComponent mPageComponent;    private boolean loadMoreFromTop = false;    private boolean loadMoreCompleteFlag = false;    private LoadingView loadingView;    private String searchKeyword=null;    private long currentPage=1;    private LinearLayout orderEmptyContainer;    private TextView emptyTextView;    public OrderInfoListFragment(String titleName, String eventId) {        this.mTitleName = titleName;        this.mEventId = eventId;    }    public static OrderInfoListFragment newInstance(String titleName, String eventId) {        return new OrderInfoListFragment(titleName, eventId);    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        context = getActivity();        OrderSdk.init(context, TMAppInfo.TTID, "tmallorder", "1.0");        OrderSdk.setLogSwitcher(true);        mOrderEngine = OrderEngine.getInstance();    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        View rootView = inflater.inflate(R.layout.fragment_trade_record, container, false);        titleView = (TextView) ViewHelper.findViewById(rootView, R.id.tradeInfoTitle);        searchView = (SearchView) ViewHelper.findViewById(rootView, R.id.trade_info_search_control);        tradeInfoListView = (PagingListView) ViewHelper.findViewById(rootView, R.id.tradeInfoListView);        orderEmptyContainer = (LinearLayout) ViewHelper.findViewById(rootView, R.id.order_empty_container);        //删掉searchView前面的搜索图标        int magId = getResources().getIdentifier("android:id/search_mag_icon", null, null);        ImageView magImage = (ImageView) searchView.findViewById(magId);        magImage.setLayoutParams(new LinearLayout.LayoutParams(0, 0));        View v;        int searchPlateId = getResources().getIdentifier("android:id/search_plate", null, null);        v = searchView.findViewById(searchPlateId);        if (v != null) {            v.setBackground(getResources().getDrawable(R.drawable.transparent));        }        int searchSrcTextId = getResources().getIdentifier("android:id/search_src_text", null, null);        v = searchView.findViewById(searchSrcTextId);        if (v instanceof AutoCompleteTextView) {            AutoCompleteTextView textView = (AutoCompleteTextView) v;            textView.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);            textView.setHintTextColor(0x4c5F646E);        }        mOrderInfoListAdapter = new OrderInfoListAdapter();        tradeInfoListView.setAdapter(mOrderInfoListAdapter);        tradeInfoListView.setPagingListener(this);        tradeInfoListView.setCurrentPage(1);        loadOrderData(mEventId, 1);        loadingView = new LoadingView(getActivity());        setOrderEmptyContainerView(loadingView);        loadingView.start();        emptyTextView = (TextView) inflater.inflate(R.layout.empty_text_view, null);        titleView.setText(mTitleName);        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {            @Override            public boolean onQueryTextSubmit(String query) {                searchKeyword=query;                resetOrderInfoListView();                loadOrderData(mEventId, 1);                return true;            }            @Override            public boolean onQueryTextChange(String newText) {                if(newText.isEmpty()) {                    searchKeyword="";                    resetOrderInfoListView();                    loadOrderData(mEventId, 1);                }                return true;            }        });        return rootView;    }    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);//        mEventId=TradeRecordActivity.initEventId;    }    @Override    public void onDetach() {        super.onDetach();    }    public void onEventMainThread(SideBlockListItem event) {//        this.sideBlockListItem = event;    }    public void onEventMainThread(TradeItemClickEvent event) {        titleView.setText(event.itemTitle);        mEventId = event.eventId;        resetOrderInfoListView();        loadOrderData(mEventId, 1);//        loadingView.start();       setOrderEmptyContainerView(loadingView);        loadingView.start();    }    public void onEventMainThread(RefreshItemListEvent event) {        mOrderInfoListAdapter.removeItem(event.itemViewPosition);//        loadOrderData(mEventId, currentPage);//        tradeInfoListView.setSelection(event.itemViewPosition+1);    }    public void queryOrderList(String eventId, String condition, long page) {        if (mEventInfo == null || !mEventInfo.code.equals(eventId)) {            List<BasicInfo> tabInfos = mOrderEngine.getTabInfos();            if (tabInfos != null && tabInfos.size() > 0) {                for (BasicInfo info : tabInfos) {                    if (eventId.equals(info.code)) {                        mEventInfo = info;                        break;                    }                }            }        }        mCondition = condition;        if (!TextUtils.isEmpty(condition)) {            mOrderEngine.searchOrder(context, mEventInfo, ""+page, condition, new QueryListListener());        } else {            mOrderEngine.queryOrderList(context, mEventInfo,""+page, new QueryListListener());        }    }    **@Override    public void onNextPage(long page) {          loadMoreFromTop = false;          loadOrderData(mEventId, page);        currentPage=page;          Log.d("getCurrentPage", "" + page + "   " + mPageComponent.getTotalNumber());    }**    private void resetOrderInfoListView() {        tradeInfoListView.setCurrentPage(1);        tradeInfoListView.smoothScrollToPosition(0, 0);        mOrderInfoListAdapter.clear();    }    class QueryListListener implements OrderOperateCallback {        @Override        public void onH5(BasicInfo info, String url, boolean isCurrentViewUrl) {            //降级时使用,直接跳转到网页            NavigatorUtils.openH5Page(getActivity(), url);        }        @Override        public void onNativeUrl(BasicInfo basicInfo, StorageComponent storageComponent, Map<String, String> map) {            //根据code跳转到物流详情,订单详情等本地的activity        }        @Override        public void onAlert(BasicInfo basicInfo, StorageComponent storageComponent, String s, String s1) {            //确定删除?提示框        }        @Override        public void onToast(BasicInfo basicInfo, StorageComponent storageComponent, String s) {            //评价成功提示        }        @Override        public void onNative(BasicInfo basicInfo, StorageComponent storageComponent, Map<String, Object> map) {            //旺旺联系卖家等操作        }        @Override        public void onMtopStart() {        }        @Override        public void onMtopEnd() {        }        @Override        public void onMtopSuccess(BasicInfo info, MtopResponse response, List<MainOrderCell> orderCellList, PageComponent pageComponent) {            orderEmptyContainer.removeAllViews();                if (!orderCellList.isEmpty()) mOrderInfoListAdapter.addMoreData(orderCellList);                if (mOrderInfoListAdapter.isEmpty()) {                    setOrderEmptyContainerView(emptyTextView);            }            mPageComponent=pageComponent;            int pageNumber=(Integer.parseInt(String.valueOf(mPageComponent.getTotalNumber())))/                    Integer.parseInt(String.valueOf(mPageComponent.getPageSize()));            int lastPageItemNumber=(Integer.parseInt(String.valueOf(mPageComponent.getTotalNumber())))%                    Integer.parseInt(String.valueOf(mPageComponent.getPageSize()));            if(lastPageItemNumber!=0) pageNumber++;            Log.d("pagepageNumber", "" + pageNumber);            tradeInfoListView.setCurrentPage(Integer.parseInt(String.valueOf(mPageComponent.getCurrentPage())));            Log.d("mOrderInfoListAdapterCount", "" + mOrderInfoListAdapter.getCount());            tradeInfoListView.setTotalPage(pageNumber + 1);            tradeInfoListView.finishLoading();        }        @Override        public void onMtopError(BasicInfo basicInfo, MtopResponse response) {            Toast.makeText(getActivity(),response == null ?new String("请求出错") : response.getRetMsg(),Toast.LENGTH_SHORT).show();        }        @Override        public void onMtopSystemError(BasicInfo basicInfo, MtopResponse mtopResponse) {            onMtopError(basicInfo,mtopResponse);        }    }    protected void loadOrderData(String eventId,long page) {        String searchCondition = null;        if (!TextUtils.isEmpty(searchKeyword)) {            JSONObject jsonObject = new JSONObject();            jsonObject.put("itemTitle", searchKeyword);            searchCondition = jsonObject.toJSONString();        }        queryOrderList(eventId, searchCondition, page);    }    private void setOrderEmptyContainerView(View v)    {        orderEmptyContainer.removeAllViews();        orderEmptyContainer.addView(v);    }}
0 0
原创粉丝点击