package com.xinxin.everyxday.fragment; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.ListView; import com.loopj.android.http.RequestParams; import com.txx.androidpaginglibrary.listwrap.listview.PagingListViewWrapBase; import com.txx.androidpaginglibrary.listwrap.listview.PagingListViewWrapBase.PagingListViewWrapDelegate; import com.txx.androidpaginglibrary.listwrap.listview.PagingRefreshingListViewWrap; import com.txx.androidpaginglibrary.listwrap.loaderrorview.LoadListDataErrorViewWrap; import com.txx.androidpaginglibrary.listwrap.loaderrorview.LoadListDataErrorViewWrap.LoadListDataErrorViewWrapDelegate; import com.xinxin.everyxday.R; import com.xinxin.everyxday.base.loopj.requestinstance.CommonListRequestWrap; import com.xinxin.everyxday.bean.base.CommonResponseBody; import com.xinxin.everyxday.bean.base.CommonResponseHeader; import com.xinxin.everyxday.util.StringUtil; import java.util.List; public abstract class ListBaseFragment<T> extends Fragment implements CommonListRequestWrap.ListDataLoadWrapDelegate<T>, PagingListViewWrapDelegate, LoadListDataErrorViewWrapDelegate { protected LayoutInflater inflater; protected ViewGroup containerView; private CommonListRequestWrap<T> listDataLoadWrap; private PagingListViewWrapBase pagingListViewWrap; private LoadListDataErrorViewWrap loadListDataErrorViewWrap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); inflater = LayoutInflater.from(getActivity()); listDataLoadWrap = new CommonListRequestWrap<T>(getActivity(), this, getBeanType()); pagingListViewWrap = getPagingListViewWrap(this); loadListDataErrorViewWrap = new LoadListDataErrorViewWrap(this); } public abstract Class<T> getBeanType(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return getFragmentView(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } /** * 获取整个fragmentView * @return */ public abstract View getFragmentView(); /** * 获取列表类型 下拉或者其他已实现的列表类型 * @param pagingListViewWrapDelegate * @return */ public abstract PagingListViewWrapBase getPagingListViewWrap(PagingListViewWrapDelegate pagingListViewWrapDelegate); /** * 获取listview的parentView * @return */ public ViewGroup getContainerView(){ return containerView; } //---------------ListDataLoadWrapDelegate public abstract String getRequestType(); //接口是否需要签名header 默认是不需要带签名 如果接口要带签名则在对应的界面重写次方法 返回true就可以了 @Override public boolean isRequestNeedSignParams(){ return false; } @Override public RequestParams getRequestParams() { return null; } @Override public boolean isNeedLoadDataFromNetWork(){ return true; } @Override public boolean isListViewRefreshing() { return pagingListViewWrap.isListViewRefreshing(); } @Override public void notifyLoadListFailure(){ if(!isActivityAttached()){ return; } if(isLoadingFirstPage() && isShowEmpty()){//页面显示重新加载 loadListDataErrorViewWrap.setLoadFirstPageDataFailureView(getAttachActivity(), inflater);//context }else{//listfooter更改为点击加载更多 if(!pagingListViewWrap.isListViewRefreshing()){ pagingListViewWrap.setFooterLoadCurPageView(inflater, getString(R.string.common_paging_click_reload_tip));//context.getResources(). }else{ pagingListViewWrap.removeFooterView(); } } } @Override public void notifyLoadListSuccess(CommonResponseBody<T> responseBody) { List<T> voList = responseBody.getList(); CommonResponseHeader responseHeader = responseBody.getResponseHeader(); int serverResponseCurPageCount = (voList == null || voList.size() == 0) ? 0 : voList.size(); // System.out.println("\r\n notifyLoadListSuccess : " + serverResponseCurPageCount + " curLoadPage : " + curLoadPage); if(serverResponseCurPageCount == 0 && isLoadingFirstPage()){ //第一页并且没有数据返回,则页面显示空 if(isShowEmpty()){ String emptyString = getEmptyString(); if(StringUtil.isEmpty(emptyString) && isActivityAttached()){ emptyString = getString(R.string.common_paging_list_load_empty_tip); } loadListDataErrorViewWrap.setLoadDataResponseEmptyView(inflater, emptyString); return; } //当listview带了headerview(不可删除),并且此列表没有数据时,可能需要加一个footerview,提示当前列表暂无数据。 if(getListHeaderView() != null){ pagingListViewWrap.setFooterEmptyView(inflater); return; } } if(voList != null && voList.size() > 0){ if(pagingListViewWrap.isListViewRefreshing()){ clearLoadedListData(); } addAll(responseBody); } pagingListViewWrap.updateListView(inflater); boolean isShowFooterView = false; if(responseHeader != null){ if(!StringUtil.isEmpty(responseHeader.getLink())){ isShowFooterView = true; } } pagingListViewWrap.setFooterLoadingView(isShowFooterView); } @Override public void notifyLoadListEnd() { if (pagingListViewWrap.isListViewRefreshing()) { pagingListViewWrap.refreshComplete(); } } //----------PagingListViewWrapDelegate @Override public boolean isListDataLoading() { return listDataLoadWrap.isListDataLoading(); } @Override public void loadListData() { listDataLoadWrap.loadListData(); } public abstract void addListViewToContainer(View listView); // public abstract void addRecyleView(RecyclerView recyclerView); @Override public int getListCount() { return getLoadedListCount(); } @Override public int getListViewItemType(int position) { return 0; } @Override public int getListViewTypeCount() { return 1; } @Override public boolean isAdapterItemEnable(int position) { return false; } public abstract View getCovertView(int position); public abstract void initCovertView(View convertView, int position); @Override public View getEmptyFooterView(){ return null; } //-----------LoadListDataErrorViewWrapDelegate @Override public void addLoadFirstPageDataFailureView(View errorView) { getContainerView().removeAllViews(); getContainerView().addView(errorView,new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } @Override public void addFirstPageReloadingView(View loadingView) { getContainerView().removeAllViews(); getContainerView().addView(loadingView,new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setListViewRefreshingStatus(); listDataLoadWrap.loadListData();//加载第一页 } @Override public void addEmptyView(View emptyView) { getContainerView().removeAllViews(); getContainerView().addView(emptyView,new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } //-------------扩展部分 public boolean isLoadingFirstPage(){//根据集合数量判断是否是第一页 if(getViewListData() == null || getViewListData().size() == 0){ return true; } return false; } public void clearLoadedListData(){ if(getViewListData() != null){ getViewListData().clear(); } } public int getLoadedListCount(){ if(getViewListData() != null){ return getViewListData().size(); } return 0; } public abstract List<T> getViewListData(); //某些列表需要对返回list vo更改 public void addAll(CommonResponseBody<T> resultBody) { getViewListData().addAll(resultBody.getList()); } /** * 1.特殊列表 可能不需要显示空界面 * 2.当列表数据为空时,并且listview已经有headview时,不显示空界面,界面显示listview的headerview。 * 3.直接显示空间面 */ public boolean isShowEmpty() { return getListHeaderView() == null ? true : false ; } /** * 当列表数据为空时,空界面提示文字内容。每个界面提示内容可能不一样,所以放出此接口。 * @return */ public String getEmptyString() { return null; } //--------------------------给子类调用 public void updateListView(){ pagingListViewWrap.updateListView(inflater); } public void notifyMyListView(){ pagingListViewWrap.notifyMyListView(); } public ListView getListView(){ return pagingListViewWrap.getListView(); } public BaseAdapter getListAdapter(){ return pagingListViewWrap.getListAdapter(); } public String getListHeaderViewTag(){ return pagingListViewWrap.getListHeaderViewTag(); } public View getListHeaderView(){ return pagingListViewWrap.getListHeaderView(); } public void reloadFragmentListData(){ if(!listDataLoadWrap.isListDataLoading() && !pagingListViewWrap.isListViewRefreshing() && isLoadingFirstPage()){ setListViewRefreshingStatus(); listDataLoadWrap.loadListData(); } } public void reFreshingListData(){ if (!listDataLoadWrap.isListDataLoading()) { setListViewRefreshingStatus(); loadListData(); } } private void setListViewRefreshingStatus(){ //将列表置于下拉刷新状态 ((PagingRefreshingListViewWrap)pagingListViewWrap).setListViewRefreshing(); } //---------- public boolean isActivityAttached(){ return isAdded(); } public Activity getAttachActivity(){ if(isAdded()){ return getActivity(); } return null; } }