Android开源代码解读のOnScrollListener实现ListView滚屏时不加载数据
使用ListView过程中,如果滚动加载数据的操作比较费时,很容易在滚屏时出现屏幕卡住的现象,一个解决的办法就是不要在滚动时加载数据,而是等到滚动停止后再进行数据的加载。这同样要实现OnScrollListener接口,关于该接口的简要描述见上一篇文章,这里直接进行代码的分析:[java]
package hust.iprai.asce1885;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MainActivity extends ListActivity implements OnScrollListener {
private TextView mStatus; //显示滚屏状态
private boolean mBusy = false; //标识是否存在滚屏操作
/**
* 自定义Adapter,实现ListView中view的显示
*
*/
private class SlowAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public SlowAdapter(Context context) {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/**
* 列表中元素个数取决于数据的个数
*/
public int getCount() {
return mStrings.length;
}
/**
* 我们的模拟数据是从数组中获取的,因此这里直接返回索引值就可以获取相应的数据了
*/
public Object getItem(int position) {
return position;
}
/**
* 使用数组的索引作为唯一的id
*/
public long getItemId(int position) {
return position;
}
/**
* 获取List中每一行的view
*/
public View getView(int position, View convertView, ViewGroup parent) {
TextView text;
//给text赋值
if (null == convertView) {
text = (TextView) mInflater.inflate(android.R.layout.易做图_list_item_1, parent, false);
} else {
text = (TextView) convertView;
}
if (!mBusy) {
//当前不处于加载数据的忙碌时期(没有滚屏),则显示数据
text.setText(mStrings[position]);
//这里约定将tag设置为null说明这个view已经有了正确的数据
text.setTag(null);
} else {
//当前处于滚屏阶段,不加载数据,直接显示数据加载中提示
text.setText("Loading...");
//tag非空说明这个view仍然需要进行数据加载并显示
text.setTag(this);
}
return text;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mStatus = (TextView) findViewById(R.id.status);
mStatus.setText("Idle");
//使用自定义的ListAdapter将数据映射到TextView中
setListAdapter(new SlowAdapter(this));
//设置滚动易做图
getListView().setOnScrollListener(this);
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_ST
补充:移动开发 , Android ,