package com.bczm.widgetcollections.ui.holder; import java.util.concurrent.atomic.AtomicBoolean; import android.view.View; import android.view.View.OnClickListener; import android.widget.RelativeLayout; import com.bczm.widgetcollections.R; import com.bczm.widgetcollections.ThreadManager; import com.bczm.widgetcollections.ui.adapter.DefaultAdapter; import com.bczm.widgetcollections.utils.UIUtils; public class MoreHolder extends BaseHolder<Integer> implements OnClickListener { public static final int HAS_MORE = 0; public static final int NO_MORE = 1; public static final int ERROR = 2; private RelativeLayout mLoading, mError; private DefaultAdapter mAdapter; private volatile boolean mIsLoading; private AtomicBoolean flag = new AtomicBoolean(false); public MoreHolder(DefaultAdapter adapter, boolean hasMore) { setData(hasMore ? HAS_MORE : NO_MORE); mAdapter = adapter; } @Override protected View initView() { View view = UIUtils.inflate(R.layout.list_more_loading); mLoading = (RelativeLayout) view.findViewById(R.id.rl_more_loading); mError = (RelativeLayout) view.findViewById(R.id.rl_more_error); mError.setOnClickListener(this); return view; } @Override public void refreshView() { Integer data = getData(); mLoading.setVisibility(data == HAS_MORE ? View.VISIBLE : View.GONE); mError.setVisibility(data == ERROR ? View.VISIBLE : View.GONE); } @Override public View getRootView() { if (getData() == HAS_MORE) { loadMore(); } return super.getRootView(); } public MoreHolder setAdapter(DefaultAdapter adapter) { mAdapter = adapter; return this; } @Override public void onClick(View v) { loadMore(); } public void loadMore() { if (!mIsLoading) { mIsLoading = true; ThreadManager.getLongPool().execute(new Runnable() { @Override public void run() { final int loadMore = mAdapter.loadMore(); UIUtils.post(new Runnable() { @Override public void run() { setData(loadMore); mIsLoading = false; } }); } }); } } }