引用:http://www.cnblogs.com/oldfeel/archive/2012/06/01/2530584.html
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/arc_hf_search_result" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/arc_hf_search_item" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout> </ScrollView>
ArcHFSearchResult.java
public class ArcHFSearchResult extends Activity { protected static final String TAG = "ArcHFSearchResult"; private ScrollView svResult; private LinearLayout llItem; private String[] arrayStr; private int pageCount = 0; private int resultCount = 10000; private int eachCount = 3000; private View view; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); svResult = (ScrollView) findViewById(R.id.arc_hf_search_result); llItem = (LinearLayout) findViewById(R.id.arc_hf_search_item); svResult.setOnTouchListener(svListener); view = svResult.getChildAt(0); // 将要显示的10000条数据 arrayStr = new String[resultCount]; for (int i = 0; i < resultCount; i++) { arrayStr[i] = i + ""; } // 第一次添加数据,每次添加3000条。 AddResult(); } class svTouchListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: // 如果触发监听事件,并且有内容,并且ScrollView已经拉到底部,加载一次数据 if (svListener != null && view != null && view.getMeasuredHeight() - 20 <= svResult .getScrollY() + svResult.getHeight()) { AddResult(); } break; default: break; } return false; } } svTouchListener svListener = new svTouchListener(); /** * 添加结果 */ protected void AddResult() { if (eachCount * pageCount < resultCount) { for (int i = 0; i < eachCount; i++) { int k = i + eachCount * pageCount; if (k >= resultCount) break; TextView tv = new TextView(this); tv.setText("hello world" + arrayStr[k]); llItem.addView(tv); } pageCount++; } } }