XListView开源框架的使用

1.下载XListView的Demo

http://download.csdn.net/detail/and_hl/9563537


2.打开Demo找到src中的view文件夹,将里面的三个java文件拷贝到自己的项目工程中,此时文件会报错,再去Demo中找到res文件中的layout,把其中的xlistview_footer.xml和xlistview_header.xml两个xml文件拷贝到自己的layout文件中,再去Demo中找到res文件中的values文件中的strings.xml文件中的字符串资源拷贝下来,别忘了去刚才拷贝的三个java文件中导入本工程的 R 文件


3. 下面就可以开始编写代码了

创建自己的布局文件 并对XListView进行引用,找到刚才拷贝的三个java文件,拷贝XListView.java文件的全路径。

<com.example.xlistview.XListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
   
</com.example.xlistview.XListView>


4. 在Activity中

xListView = (XListView) view.findViewById(R.id.listView1);

xListView.setPullRefreshEnable(true);//支持下拉刷新

xListView.setPullLoadEnable(true);//支持加载更多


xListView.setXListViewListenerXListViewListener listener); //注意!!!此时设置的是 XListView的监听


设置监听 重写两个方法onRefresh()和onLoadMore(),当触发下拉刷新事件的时候就会回调onRefresh()方法,上拉加载的时候会回调onLoadMore()方法 在其中进行自己的逻辑处理。


自己的逻辑写完后不要忘记调用两个停止的方法,不然刷新或加载的动画会一直不消失

xListView.stopLoadMore();//停止加载更多
xListView.stopRefresh();
//停止刷新

!!还可以设置上次刷新的时间

xListView.setRefreshTime(getTime());


/**

*  当前的时间

*/

public String getTime(){
SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss"); 
Date date=new Date();
String time = format.format(date);

return time;



5.下面是我自己请求处理数据的代码,仅供参考:


LinkedList<News> list;
ArrayList<News> arrlist;

private MyListViewAdapter adapter;

private XListView xListView;

private int Index = 1;

@SuppressLint("HandlerLeak") 
private Handler handler = new Handler(){


@SuppressWarnings("unchecked")
public void handleMessage(Message msg) {
int what = msg.what;
switch (what) {
case 1:
list = (LinkedList<News>) msg.obj;

arrlist = new ArrayList<News>(list);

adapter = new MyListViewAdapter(list, mainActivity);

xListView.setAdapter(adapter);

break;

case 2:
for (News item :  (LinkedList<News>) msg.obj) {
list.addFirst(item);
}
adapter.notifyDataSetChanged();
OverLoad();
break;

case 3:
for (News item :  (LinkedList<News>) msg.obj) {
list.addLast(item);
}
adapter.notifyDataSetChanged();
OverLoad();
break;


default:
break;
}
};
};




@Override
public View initView() {

View view = View.inflate(mainActivity, R.layout.xlistview_view, null);

xListView = (XListView) view.findViewById(R.id.listView1);

xListView.setPullRefreshEnable(true);

xListView.setPullLoadEnable(true);

new Thread(){
public void run() {
sendMessage(1, 15, 1);
};
}.start();

xListView.setXListViewListener(new IXListViewListener() {

@Override
public void onRefresh() {
new Thread(){
public void run() {
sendMessage(1, 15, 2);
};
}.start();
}

@Override
public void onLoadMore() {
new Thread(){
public void run() {
sendMessage(++Index, 15, 3);
};
}.start();
}
});

return view;
}


private void OverLoad(){
xListView.stopLoadMore();
xListView.stopRefresh();
xListView.setRefreshTime(getTime());
}


@SuppressLint("SimpleDateFormat")
public String getTime(){
SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss"); 
Date date=new Date();
String time = format.format(date);

return time;
}


/**
*  发送消息  通知Handler处理信息
* @param pageIndex 要请求数据的哪一页
* @param pageSize 要请求数据的条数
* @param flag 标志 判断是初始化 刷新 加载更多
*/
private void sendMessage(int pageIndex, int pageSize, int flag){
LinkedList<News> linkedList = GetData(pageIndex, pageSize);

Message msg = Message.obtain();

msg.what = flag;

msg.obj = linkedList;

handler.sendMessage(msg);
}

/**
* 请求网络数据
* @param pageIndex 要请求数据的哪一页
* @param pageSize 要请求数据的条数
* @return 集合数据
*/
private LinkedList<News> GetData(int pageIndex, int pageSize){
String spec = "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex=" + pageIndex + "&pageSize=" + pageSize;

LinkedList<News> news = null;

News item = null;
try {
URL url = new URL(spec);//统一资源定位

HttpURLConnection openConnection = (HttpURLConnection) url.openConnection();// 打开连接

XmlPullParser parser = Xml.newPullParser();

parser.setInput(new InputStreamReader(openConnection.getInputStream()));

int eventType = parser.getEventType();
 
while (eventType != XmlPullParser.END_DOCUMENT ) {
switch (eventType) {
case XmlPullParser.START_TAG:
if("newslist".equals(parser.getName())){
news = new LinkedList<News>();
}else if("news".equals(parser.getName())){
item = new News();
}else if("id".equals(parser.getName())){
item.setId(Integer.parseInt(parser.nextText()));
}else if("title".equals(parser.getName())){
item.setTitle(parser.nextText());
}else if("body".equals(parser.getName())){
item.setBody(parser.nextText());
}else if("commentCount".equals(parser.getName())){
item.setCommentCount(Integer.parseInt(parser.nextText()));
}else if("author".equals(parser.getName())){
item.setAuthor(parser.nextText());
}else if("pubDate".equals(parser.getName())){
item.setPubDate(parser.nextText());
}
break;

case XmlPullParser.END_TAG:
if("news".equals(parser.getName())){
news.add(item);
}
break;


default:
break;
}

eventType = parser.next();
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}

return news;
}



适配器:

LinkedList<News> list;
Context context;


public MyListViewAdapter(LinkedList<News> list, Context context) {
super();
this.list = list;
this.context = context;
}


@Override
public int getCount() {
return list.size();
}


@Override
public Object getItem(int position) {
return null;
}


@Override
public long getItemId(int position) {
return 0;
}


@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 加载布局
View view = LayoutInflater.from(context).inflate(R.layout.adapter_item, null);


// 找控件
TextView tv1 = (TextView) view.findViewById(R.id.textView1);
TextView tv2 = (TextView) view.findViewById(R.id.textView2);
TextView tv3 = (TextView) view.findViewById(R.id.textView3);
TextView tv4 = (TextView) view.findViewById(R.id.textView4);


// 赋值
tv1.setText(list.get(position).getTitle());
tv2.setText("发布人:" + list.get(position).getAuthor());
tv3.setText("发布于:" + list.get(position).getPubDate());
tv4.setText("评论:" + list.get(position).getCommentCount());


return view;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值