1. activity_main.xml布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/fragment"> </FrameLayout>
2. loading_view.xml布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="10dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/loading" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>
3. SimpleAdapter.java
package com.idt.os.frameplay; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * Created by jzhou on 2018/5/24. */ public class SimpleAdapter extends BaseAdapter { private int mCount = 20; private final LayoutInflater mLayoutInflater; private final String mPositionString; private final int mTextViewResourceId; public SimpleAdapter(Context context,int mTextViewResourceId) { this.mTextViewResourceId = mTextViewResourceId; mPositionString = context.getString(R.string.position)+" "; mLayoutInflater = LayoutInflater.from(context); } public void addMoreItems(int count){ mCount += count; notifyDataSetChanged(); } @Override public int getCount() { return mCount; } @Override public String getItem(int position) { return mPositionString+position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final TextView tv; if(convertView == null){ tv = (TextView) mLayoutInflater.inflate(mTextViewResourceId,null); }else { tv = (TextView) convertView; } tv.setText(getItem(position)); return tv; } }
4.AutoLoadingListFragment.java
package com.idt.os.frameplay; import android.app.ListFragment; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.widget.AbsListView; /** * Created by jzhou on 2018/5/24. */ public class AutoloadingListFragment extends ListFragment implements AbsListView.OnScrollListener { private final int AUTOLOAD_THRESHOLD = 4; private final int MAXIMUM_ITEMS = 52; private SimpleAdapter mAdapter; private View mFooterView; private Handler mHandler; private boolean mIsLoading = false; private boolean mMoreDataAvailable = true; private boolean mWasloading = false; private Runnable mAddItemsRunnable = new Runnable() { @Override public void run() { mAdapter.addMoreItems(10); mIsLoading = false; } }; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); final Context context = getActivity(); mHandler = new Handler(); mAdapter = new SimpleAdapter(context,android.R.layout.simple_list_item_1); mFooterView = LayoutInflater.from(context).inflate(R.layout.loading_view,null); getListView().addFooterView(mFooterView,null,false); setListAdapter(mAdapter); getListView().setOnScrollListener(this); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(!mIsLoading && mMoreDataAvailable){ if(totalItemCount >= MAXIMUM_ITEMS){ mMoreDataAvailable = false; getListView().removeFooterView(mFooterView); }else if(totalItemCount - AUTOLOAD_THRESHOLD <= firstVisibleItem+visibleItemCount){ mIsLoading = true; mHandler.postDelayed(mAddItemsRunnable,1000); } } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onStart() { super.onStart(); if(mWasloading){ mWasloading = false; mIsLoading = true; mHandler.postDelayed(mAddItemsRunnable,1000); } } @Override public void onStop() { super.onStop(); mHandler.removeCallbacks(mAddItemsRunnable); mWasloading = false; mIsLoading = false; } }
5. MainActivity.java
package com.idt.os.frameplay; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fragment, new AutoloadingListFragment()); ft.commit(); } }