1 把原来的布局文件改成如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#000000"
android:layout_height="fill_parent" android:layout_width="fill_parent">
<ListView android:id="@id/android:list" android:divider="#FFFFFF"
android:dividerHeight="3.0dip" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView android:id="@id/android:empty" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="没有数据" />
</LinearLayout>
其中,ListView的ID如果自己定义,就可以随便取名字,这样下面的Activity就要从Activity(而不是ListActivity);如果定义成="@id/android:list",注意没有“+”,并且Activity是从ListActivity继承来的,就可以直接用getListView()得到ListView控件。看个人喜好啦。TextView 的id是"@id/android:empty“,也没"+",从预览图里是看不到它的,它在ListView没有数据时才显示,有数据就不显示。
2 编写Activity文件
编写Activity文件,并且自定义一个继承自BaseAdapter的适配器,做ListView的适配器,并且实现单击和长按的监听器
package masofeng.zwd;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import weibo4android.Status;
import weibo4android.User;
import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.androidexamples.OAuthConstant;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
public class HomeTimeLineActivity extends ListActivity implements OnItemClickListener,OnItemLongClickListener{
private ListView lv;
private MylistAdpter mla;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.hometimelinetab);
System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET);
//新建一个RequestToken
RequestToken requestToken = new RequestToken("1364680900","f8f43ee3c2e6bb6e57d5354e0570237c");
//新建一个AccessToken
AccessToken accessToken = new AccessToken(
"32e03adb68945490be2ec246723f5bf5",
"d0b5c462e6e61fcfa43202a4354f8102");
//将RequestToken和AccessToken设到OAuthConstant单例中
OAuthConstant.getInstance().setRequestToken(requestToken);
OAuthConstant.getInstance().setAccessToken(accessToken);
Weibo weibo = OAuthConstant.getInstance().getWeibo();
weibo.setToken(OAuthConstant.getInstance().getToken(),OAuthConstant.getInstance().getTokenSecret());
List<Status> homestatlsit = new ArrayList<Status>();
Log.i("myweibo","HomeTimeLineActivity------->onCreate");
try {
homestatlsit = weibo.getFriendsTimeline();
Log.i("myweibo","HomeTimeLineActivity------->get List<Status> OK!");
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("myweibo","homestatlsit.size():"+homestatlsit.size());
lv = getListView();
lv.setOnItemClickListener(this);
lv.setOnItemLongClickListener(this);
mla = new MylistAdpter(HomeTimeLineActivity.this,homestatlsit);
lv.setAdapter(mla);
}
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
// arg2是在ListView中的位置,arg3是getItemId返回的值
Log.i("myweibo","onItemLongClick--->arg2:"+arg2+";arg3:"+arg3);
return false;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// arg2是在ListView中的位置,arg3是getItemId返回的值
Log.i("myweibo","onItemClick--->arg2:"+arg2+";arg3:"+arg3);
}
}
//用于ListView的监听类
class MylistAdpter extends BaseAdapter{
private Context ctx;
private List<Status> adplist;
private LayoutInflater inflater;
//自定义构造函数,以取得List
public MylistAdpter(Context ctx1,List<Status> list) {
super();
// TODO Auto-generated constructor stub
adplist = list;
this.ctx = ctx1;
inflater = LayoutInflater.from(ctx);
Log.i("myweibo","listadpter--->construct!");
}
@Override
public int getCount() {
// TODO Auto-generated method stub
Log.i("myweibo","listadpter--->getCount:"+adplist.size());
return adplist.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
Log.i("myweibo","listadpter--->getItem");
return adplist.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
Log.i("myweibo","listadpter--->getItemId:"+position);
return position+10;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i("myweibo", "listadpter--->getView position:"+position);
TextView tv1 = new TextView(ctx);
tv1.setText(adplist.get(position).getUser().getName()+":"+adplist.get(position).getText());
Log.i("myweibo", "MylistAdpter------>"
+ adplist.get(position).getUser().getName()+":"+adplist.get(position).getText());
return tv1;
}
}
在适配器中,getView负责显示各个ListView的Item。但要注意适配器中个函数调用的顺序,加了打印后会发现在每次调用getView前,总是调用getCount,而getCount返回是多少就会建立多少个Item。在各个函数中,position始终表示的是当前Item在整个List中的位置,从0开始。那么,getItemId返回的值又有什么用呢?
看看onItemLongClick和onItemClick的参数,有两个整型的量(.....int arg2, long arg3),打印之后发现(在getItemId的return中将position加了个值),arg2表示的是position的值,arg3是getItemId返回的值,这样就可以在getItemId中返回我们想要的值了,比如微博的ID,这样当点击这个微博条目时就能得到这个条目的信息了。之后就可以通过在getView中inflate布局xml文件来实现各个条目的随意扩展了
看看效果