Custom listView automatically loads more content at the bottom
Custom listView automatically loads more content at the bottom
// Drop-down head Layout
# FF999999
# Ff00ddff
# Ff99cc00
# Ffffbb33
# Ffff4444
// Automatically load the layout at the bottom
// Custom listview
Public class LoadMoreListView extends ListView implements AbsListView. onScrollListener {private View rooterView; private boolean isHaveMoreData = true; // whether more data exists (default) private ProgressBar progressBar; private TextView tipContext; private RefreshAndLoadMoreView mRefreshAndLoadMoreView; private boolean isLoading = false; // whether the private OnLoadMoreListener mOnLoadMoreListener is being loaded; public LoadMoreListView (Context context, AttributeSet attrs) {super (context, attrs ); // dynamically load the bottom layout of the room view = LayoutInflater. from (context ). inflate (R. layout. pull_to_load_footer, null); progressBar = (ProgressBar) rooterView. findViewById (R. id. footer_progressbar); tipContext = (TextView) rooterView. findViewById (R. id. footer_hint_textview); // Add a layout to the bottom of the listView (when the Item click event is set for the listView, The Click Event of the added layout is not triggered by default) addFooterView (rooterView, null, false); setOnScrollListener (this);} public void setRefreshAndLoadMoreView (RefreshAndLoadMoreView mRefreshAndLoadMoreView) {this. mRefreshAndLoadMoreView = mRefreshAndLoadMoreView ;}/***Set whether more data exists **@ ParamIsHaveMoreData */ Public void setHaveMoreData (boolean isHaveMoreData) {this. isHaveMoreData = isHaveMoreData; if (! IsHaveMoreData) {tipContext. setText ("only so many"); progressBar. setVisibility (View.GONE);} Else {tipContext. setText ("loading"); progressBar. setVisibility (View.VISIBLE);}}/***Loading completed */ Public void onLoadComplete () {isLoading = false;} public boolean isLoading () {return isLoading;} @ Override public void onScrollStateChanged (AbsListView view, int scrollState) {if (scrollState = OnScrollListener.SCROLL_STATE_IDLE) {If (view. getLastVisiblePosition () = view. getCount ()-1 & (mRefreshAndLoadMoreView! = Null &&! MRefreshAndLoadMoreView. isRefreshing ())&&! IsLoading & mOnLoadMoreListener! = Null & isHaveMoreData) {isLoading = true; mOnLoadMoreListener. onLoadMore () ;}}@ Override public void onScroll (AbsListView view, int marker, int visibleItemCount, int totalItemCount ){}/***Load more listeners */ Public static interface OnLoadMoreListener {public void onLoadMore ();}/***Set the load listener **@ ParamMOnLoadMoreListener */ Public void setOnLoadMoreListener (OnLoadMoreListener mOnLoadMoreListener) {this. mOnLoadMoreListener = mOnLoadMoreListener ;}}
// Custom pull-down refresh control
Public class RefreshAndLoadMoreView extends SwipeRefreshLayout {private LoadMoreListView mLoadMoreListView;/***Constructor used to use this custom method in the layout FileSwipeRefreshLayoutWidget *@ ParamContext *@ ParamAttrs */ Public RefreshAndLoadMoreView (Context context, AttributeSet attrs) {super (context, attrs); Resources res = getResources (); // set the Color Resource setColorSchemeColors (res. getColor (R. color.Refresh_color_1), Res. getColor (R. color.Refresh_color_2), Res. getColor (R. color.Refresh_color_3), Res. getColor (R. color.Refresh_color_4);} Public void setLoadMoreListView (LoadMoreListView mLoadMoreListView) {this. mLoadMoreListView = mLoadMoreListView ;}/***Touch screen events,IfListViewIf it is not empty and the data is still being loaded, the event will not be touched until the loading is complete. *@ ParamEv *@ Return */ @ Override public boolean onTouchEvent (MotionEvent ev) {if (mLoadMoreListView! = Null & mLoadMoreListView. isLoading () {return false;} return super. onTouchEvent (ev );}}
// Activity Layout
//Activity
Public class Main22Activity extends AppCompatActivity {private RefreshAndLoadMoreView mRefreshAndLoadMoreView; private LoadMoreListView mLoadMoreListView; private int page = 0; private List
Listdata = new ArrayList <> (); private Main_Fragnebt_Adapter adapter; private Handler handler = new Handler () {@ Override public void handleMessage (Message msg) {super. handleMessage (msg); if (msg. what = 0) {if (adapter = null) {adapter = new Main_Fragnebt_Adapter (Main22Activity. this, listdata); mLoadMoreListView. setAdapter (adapter);} else {adapter. notifyDataSetChanged ();} mRefreshAndLoadMoreView. setRefreshing (false); mLoadMoreListView. onLoadComplete ();} if (msg. what = 1) {mRefreshAndLoadMoreView. setRefreshing (false); mLoadMoreListView. onLoadComplete (); mLoadMoreListView. setHaveMoreData (false) ;}};@ Override protected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout.
Activity_main22); InitView (); addData (page);} private void initView () {mRefreshAndLoadMoreView = (RefreshAndLoadMoreView) findViewById (R. id.
MRefreshAndLoadMoreView); MLoadMoreListView = (LoadMoreListView) findViewById (R. id.
MLoadMoreListView); MRefreshAndLoadMoreView. setLoadMoreListView (mLoadMoreListView); mLoadMoreListView. setRefreshAndLoadMoreView (mRefreshAndLoadMoreView); // set the drop-down refresh listener to mRefreshAndLoadMoreView. setOnRefreshListener (new SwipeRefreshLayout. onRefreshListener () {@ Override public void onRefresh () {mLoadMoreListView. setHaveMoreData (true); listdata. clear (); page = 0; addData (page) ;}}); // set the loading listener mLoadMoreListView. setOnLoadMoreListener (new LoadMoreListView. onLoadMoreListener () {@ Override public void onLoadMore () {page ++; addData (page) ;}}) ;} public void addData (int page) {// obtain Network Data }}}