package com.shizhefei.mvc; import android.support.v4.widget.SwipeRefreshLayout; import android.view.View; import com.shizhefei.mvc.ILoadViewFactory.ILoadMoreView; import com.shizhefei.mvc.ILoadViewFactory.ILoadView; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 注意 :<br> * SwipeRefreshLayout必须有Parent * * @author zsy * * @param <DATA> */ public class MVCSwipeRefreshHelper<DATA> extends MVCHelper<DATA> { public MVCSwipeRefreshHelper(SwipeRefreshLayout swipeRefreshLayout) { super(new RefreshView(swipeRefreshLayout)); } public MVCSwipeRefreshHelper(SwipeRefreshLayout swipeRefreshLayout, ILoadView loadView, ILoadMoreView loadMoreView) { super(new RefreshView(swipeRefreshLayout), loadView, loadMoreView); } private static class RefreshView implements IRefreshView { private SwipeRefreshLayout swipeRefreshLayout; private View mTarget; public RefreshView(SwipeRefreshLayout swipeRefreshLayout) { this.swipeRefreshLayout = swipeRefreshLayout; if (swipeRefreshLayout.getParent() == null) { throw new RuntimeException("PtrClassicFrameLayout 必须有Parent"); } try { Method method = swipeRefreshLayout.getClass().getDeclaredMethod("ensureTarget"); method.setAccessible(true); method.invoke(swipeRefreshLayout); } catch (Exception e) { e.printStackTrace(); } try { Field field = swipeRefreshLayout.getClass().getDeclaredField("mTarget"); field.setAccessible(true); mTarget = (View) field.get(swipeRefreshLayout); } catch (Exception e) { e.printStackTrace(); } swipeRefreshLayout.setOnRefreshListener(listener); } @Override public View getContentView() { return mTarget; } @Override public View getSwitchView() { return swipeRefreshLayout; } private OnRefreshListener onRefreshListener; @Override public void setOnRefreshListener(OnRefreshListener onRefreshListener) { this.onRefreshListener = onRefreshListener; } @Override public void showRefreshComplete() { swipeRefreshLayout.setRefreshing(false); } @Override public void showRefreshing() { swipeRefreshLayout.setRefreshing(true); } private SwipeRefreshLayout.OnRefreshListener listener = new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { if (onRefreshListener != null) { onRefreshListener.onRefresh(); } } }; } }