主函数代码:
import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements AbsListView.OnScrollListener { private ListView mLv; private MainAdapter mAdapter; private View footerView; private int totalItemCount;//item总数量 private int lastVisbleItem;//最后一个item位置 private boolean isLoading;//正在加载 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLv = (ListView) findViewById(R.id.lv_main); mAdapter = new MainAdapter(this); mLv.setAdapter(mAdapter); footerView = LayoutInflater.from(this).inflate(R.layout.footer_lv,null); mLv.addFooterView(footerView); footerView.setVisibility(View.GONE); mLv.setOnScrollListener(this); footerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mAdapter.addData(addNewData()); } }); } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (totalItemCount == lastVisbleItem && scrollState == SCROLL_STATE_IDLE){ //加载更多数据 if (!isLoading){ isLoading = true; footerView.setVisibility(View.VISIBLE); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { this.lastVisbleItem = firstVisibleItem + visibleItemCount; this.totalItemCount = totalItemCount; } public List<String> addNewData(){ ArrayList<String> data = new ArrayList<>(); for (int i = 0; i < 30; i++) { data.add("添加的" + i + "条"); } return data; } class MainAdapter extends BaseAdapter{ private List<String> data; private Context context; public MainAdapter(Context context) { this.context = context; init(); } private void init() { data = new ArrayList<>(); for (int i = 0; i < 30; i++) { data.add("第" + i + "条"); notifyDataSetChanged(); } } private void addData(List<String> datas){ data.addAll(data.size(),datas); notifyDataSetChanged(); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { MyViewHolder myViewHolder; if (convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.item_lv_main,null); myViewHolder = new MyViewHolder(); myViewHolder.textView = (TextView) convertView.findViewById(R.id.tv_item_main); convertView.setTag(myViewHolder); } else{ myViewHolder = (MyViewHolder) convertView.getTag(); } myViewHolder.textView.setText(data.get(position)); return convertView; } class MyViewHolder{ TextView textView; }
}
主函数布局代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <ListView android:id="@+id/lv_main" android:layout_width="match_parent" android:layout_height="match_parent" />
</RelativeLayout>
尾布局代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/load_layout" android:paddingTop="10dp" android:paddingBottom="10dp" android:gravity="center"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/progress" style="?android:attr/progressBarStyleSmall"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载...."/> </LinearLayout>
</LinearLayout>
}