Android新浪微博开发(三)主UI的实现:用BaseAdapter做适配器的LsitView

 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文件来实现各个条目的随意扩展了

看看效果


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值