android listView 分批加载

来源:互联网 发布:c语言教程视频 编辑:程序博客网 时间:2024/04/29 19:26

当我们浏览空间到末尾时,数据它会自己加载或者需要我们点击按钮之类的继续加载新的数据。下面我们就介绍如何在ListView中实现数据的分批次加载。

首先创建一个布局文件foot.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="40dp"
    android:orientation="horizontal" >
  <Button    
      android:id="@+id/bt_load"    
      android:layout_width="wrap_content"    
      android:layout_height="match_parent"  
      android:gravity="center_vertical"
      android:text="加载更多数据" /> 
  <ProgressBar
      android:id="@+id/pg"
      android:layout_weight="1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center_horizontal"
   
      />
</LinearLayout>

xml文件创建成功后我们来看下代码
public class MainActivity extends Activity {


public static  ListView listView;
AdapterTest adapterTest;
public static   View foot;
private Boolean isBoolean = false;
private Button Btn;
private ProgressBar progressBar;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foot = getLayoutInflater().inflate(R.layout.list_foot, null);

progressBar = (ProgressBar) foot.findViewById(R.id.pg);

Btn = (Button) foot.findViewById(R.id.bt_load);

//手动加载时需要设置
progressBar.setVisibility(View.GONE);

listView = (ListView) findViewById(R.id.android_listTest);
adapterTest = new AdapterTest(this);
listView.addFooterView(foot);
listView.setAdapter(adapterTest);



//手动加载时设置的监听
Btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
progressBar.setVisibility(View.VISIBLE);
adapterTest.handler.postDelayed(new Runnable() {


@Override
public void run() {
adapterTest.handler.sendEmptyMessage(0);
progressBar.setVisibility(View.GONE);
}
}, 2000);

}
});







 
listView.setOnScrollListener(new OnScrollListener() {


@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {


}


@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
Log.d("onScroll", (listView.getCount() - 1)
+ "firstVisibleItem="
+ (firstVisibleItem + visibleItemCount - 1));
//实现自动加载
/*if (listView.getCount() - 1 == (firstVisibleItem
+ visibleItemCount - 1)) {
if (isBoolean) {
adapterTest.handler.postDelayed(new Runnable() {


@Override
public void run() {
adapterTest.handler.sendEmptyMessage(0);
}
}, 2000);
isBoolean = false;
return;
}
} else {
isBoolean = true;
}*/
}
});


}


}




适配器AdapterTest.java文件:
public class AdapterTest extends BaseAdapter {


private ArrayList<String> strings;
private Context mContext;
//设置ListView加载最大条目
private int max = 55;


public AdapterTest(Context context) {
strings = new ArrayList<String>();
this.mContext = context;
setStrigs(0, 20);
}


private void setStrigs(int start, int length) {
if (start < max - 1) {
if (start + length <= max) {
for (int i = start; i < start + length; i++) {
strings.add("项目" + (i + 1));
}
this.notifyDataSetChanged();
} else if (start + length > max) {
for (int i = start; i <max; i++) {
strings.add("项目" + (i + 1));
}
this.notifyDataSetChanged();
MainActivity.listView.removeFooterView(MainActivity.foot);
}
}else if (start == max ) {
Toast.makeText(mContext, "无数据啦", 1).show();
}
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return strings.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView view = new TextView(mContext);
view.setTextSize(20);
view.setText(strings.get(position));
return view;
}


public Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
setStrigs(strings.size(), 10);
};
};


}






0 0
原创粉丝点击