标签:long rar you import else lstat 设定 定时 over
package zhangphil.app; import android.app.ListActivity; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.os.SystemClock; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.util.AsyncListUtil; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends ListActivity { private final String TAG = "调试"; private final int NULL = -1; private AsyncListUtil<DataItem> mAsyncListUtil; private MyAdapter mAdapter; private int mFirstVisibleItem = NULL, mVisibleItemCount = NULL; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyDataCallback mDataCallback = new MyDataCallback(); MyViewCallback mViewCallback = new MyViewCallback(); mAsyncListUtil = new AsyncListUtil(DataItem.class, 20, mDataCallback, mViewCallback); mAdapter = new MyAdapter(this, NULL); setListAdapter(mAdapter); getListView().setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int scrollState) { mAsyncListUtil.onRangeChanged(); } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mFirstVisibleItem = firstVisibleItem; mVisibleItemCount = visibleItemCount; } }); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { mAsyncListUtil.refresh(); } private class MyDataCallback extends AsyncListUtil.DataCallback<DataItem> { @Override public int refreshData() { //更新数据的个数。 //假设预先设定更新若干条。 return Integer.MAX_VALUE; } /** * 在这里完成数据加载的耗时任务。 * * @param data * @param startPosition * @param itemCount */ @Override public void fillData(DataItem[] data, int startPosition, int itemCount) { Log.d(TAG, "fillData:" + startPosition + "," + itemCount); for (int i = 0; i < itemCount; i++) { DataItem dataItem = new DataItem(); dataItem.pos = startPosition + i; dataItem.content = String.valueOf(System.currentTimeMillis()); data[i] = dataItem; //模拟耗时任务,故意休眠一定时延。 SystemClock.sleep(100); } } } private class MyViewCallback extends AsyncListUtil.ViewCallback { /** * @param outRange */ @Override public void getItemRangeInto(int[] outRange) { outRange[0] = mFirstVisibleItem; outRange[1] = mFirstVisibleItem + mVisibleItemCount; /** * 如果当前ListView为空,主动为用户加载数据. * 假设预先加载若干条数据 * */ if (outRange[0] == NULL && outRange[1] == NULL) { Log.d(TAG, "当前ListView为空!"); outRange[0] = 0; outRange[1] = 9; } Log.d(TAG, "getItemRangeInto,当前可见position: " + outRange[0] + " ~ " + outRange[1]); } @Override public void onDataRefresh() { mAdapter.notifyDataSetChanged(); Log.d(TAG, "onDataRefresh"); } @Override public void onItemLoaded(int position) { mAdapter.notifyDataSetChanged(); Log.d(TAG, "onItemLoaded:" + position); } } private class MyAdapter extends ArrayAdapter { private ViewHolder holder; public MyAdapter(@NonNull Context context, int resource) { super(context, resource); } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getApplicationContext()).inflate(android.R.layout.simple_list_item_2, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.setData(getItem(position)); return convertView; } @Override public int getCount() { return mAsyncListUtil.getItemCount(); } @Nullable @Override public DataItem getItem(int position) { return mAsyncListUtil.getItem(position); } } private class ViewHolder { public TextView text1; public TextView text2; public ViewHolder(View view) { text1 = view.findViewById(android.R.id.text1); text1.setTextColor(Color.RED); text2 = view.findViewById(android.R.id.text2); text2.setTextColor(Color.BLUE); } public void setData(DataItem dataItem) { if (dataItem == null) { text1.setText("pos加载中..."); text2.setText("content加载中..."); } else { text1.setText(String.valueOf(dataItem.pos)); text2.setText(dataItem.content); } } } private class DataItem { public int pos; public String content; } }
基于Android官方AsyncListUtil优化经典ListView分页加载机制(二)
标签:long rar you import else lstat 设定 定时 over
原文地址:http://blog.csdn.net/zhangphil/article/details/78645089