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
- PagingListView显示数据
- 自定义ListView盘点-PagingListView(27)
- 数据显示
- 数据联动显示
- 数据显示函数(asp)
- dataGridView1 数据显示
- 分栏显示数据
- 数据分页显示方案
- 数据分页显示
- 数据的十六进制显示
- 获取并显示数据
- repeater分页显示数据
- flex显示中文数据
- 分页显示数据
- 排列显示图片数据
- 显示数据源中的数据
- 显示数据源中的数据
- jsp数据显示方法
- MySQL触发器入门
- 操作系统 - 死锁(Deadlock)的概述、条件、对策
- 例题 7-5 困难的串 UVa129
- 九度OJ 题目1088:剩下的树
- Java学习笔记----容器
- PagingListView显示数据
- 计算机经典书籍
- java之 ------ 枚举类型
- Android项目开发中编码风格规范总结
- ContentProvider和Uri
- LeetCode -- Combination Sum
- 九度OJ 题目1483:求最大最小数
- 对象数组
- 基本字符串压缩