Custom listView automatically loads more content at the bottom

Source: Internet
Author: User

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 }}}
 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.