使用xlistview可以实现上拉刷新 下拉加载更多
使用方法:1.先把提供的包-->res-->layout文件中的xlistview-footer.xml和xlistview_header.xml复制到自己项目的layout文件夹下
2.提示有图片缺失,在提供包中复制到自己的项目中
3..打开提供的包-->res-->values-->Strings.xml:将
<string name="app_name">XListView</string>
<string name="xlistview_header_hint_normal">下拉刷新</string>
<string name="xlistview_header_hint_ready">松开刷新数据</string>
<string name="xlistview_header_hint_loading">正在加载...</string>
<string name="xlistview_header_last_time">上次更新时间:</string>
<string name="xlistview_footer_hint_normal">查看更多</string>
<string name="xlistview_footer_hint_ready">松开载入更多</string>
复制到自己的Strings.xml中;
这个是MainActivity
private XListView xlistview;
private LinearLayout loading_ll;
protected Xlv_Adapter adapter;
protected static final int LOAD_FIRST = 1;
protected static final int LOAD_REFRESH = 2;
protected static final int LOAD_LOADMORE = 3;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case LOAD_FIRST:
// 数据加载完毕之后 隐藏主页
loading_ll.setVisibility(View.GONE);
adapter = new Xlv_Adapter((List<String>) msg.obj);
xlistview.setAdapter(adapter);
break;
case LOAD_REFRESH:
String newData = (String) msg.obj;
if (adapter != null) {
adapter.addData(newData,true);
adapter.notifyDataSetChanged();
// 加载显示数据后要隐藏
xlistview.stopRefresh();
// 设置上次更新的时间
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yy-mm-dd hh:mm");
xlistview.setRefreshTime(dateFormat.format(new Date()));
}
break;
case LOAD_LOADMORE:
if (adapter!=null) {
adapter.addData((String)msg.obj,false);
adapter.notifyDataSetChanged();
xlistview.stopLoadMore();
}
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
initDatas();
initListener();
}
private void initUI() {
xlistview = (XListView) findViewById(R.id.main_xlv);
loading_ll = (LinearLayout) findViewById(R.id.loading_ll);
}
private void initDatas() {
xlistview.setRefreshTime("刚刚");
// 在数据加载完毕前显示主页
loading_ll.setVisibility(View.VISIBLE);
// 一般情况数据从服务器来
new Thread() {
public void run() {
// 模拟数据从网上加载完毕
SystemClock.sleep(3000);
List<String> mdatasList = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
mdatasList.add("模拟数据" + i);
}
// 只有数据加载完毕之后,在主线程中设置adapter
Message msg = Message.obtain();
msg.obj = mdatasList;
msg.what = LOAD_FIRST;
handler.sendMessage(msg);
};
}.start();
}
private void initListener() {
// 设置对应的开关
xlistview.setPullLoadEnable(true);
xlistview.setPullRefreshEnable(true);
// 设置上拉和下拉的监听时间
xlistview.setXListViewListener(new IXListViewListener() {
@Override
// 下拉更新
public void onRefresh() {
new Thread() {
public void run() {
// 模拟请求数据
String dataString = "新的数据,在最上面.....";
SystemClock.sleep(3000);
Message msg = Message.obtain();
msg.obj = dataString;
msg.what = LOAD_REFRESH;
handler.sendMessage(msg);
};
}.start();
}
@Override
// 上拉加载
public void onLoadMore() {
new Thread() {
public void run() {
String dataString = "新的数据,在最下面.....";
SystemClock.sleep(2000);
Message msg = Message.obtain();
msg.what = LOAD_LOADMORE;
msg.obj = dataString;
handler.sendMessage(msg);
};
}.start();
}
});
}
}
.................................................................................................
这个就adapter设配器
package adapter;
import java.util.List;
import com.day20.xlistview.R;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class Xlv_Adapter extends BaseAdapter {
private List<String> mDatas;
public Xlv_Adapter(List<String> datas) {
mDatas = datas;
}
public void addData(String data, boolean flag) {
if (flag) {
mDatas.add(0, data);
} else {
mDatas.add(getCount(), data);
}
}
@Override
public int getCount() {
return mDatas != null ? mDatas.size() : 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(parent.getContext()).inflate(
R.layout.list_item, parent, false);
holder.list_item_textview = (TextView) convertView
.findViewById(R.id.list_item_textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.list_item_textview.setText(mDatas.get(position));
return convertView;
}
@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;
}
class ViewHolder {
TextView list_item_textview;
}
}