关闭

新浪微博开发之为ListView设置微博数据

标签: listview新浪微博layoutandroidstringnull
1849人阅读 评论(0) 收藏 举报
分类:

获取到微博数据后,我们要自定义一个Adapter为主页Listview提供数据,listView的item布局要包含微博的相关属性,主要是微博内容,用户头像,微博发表时间等,具体布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:padding="3dip"
	android:background="@color/white"
	>
	<LinearLayout android:orientation="horizontal"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:paddingTop="2dip"
		>
		<ImageView android:id="@+id/user_logo"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:background="@drawable/ic_profile"
		/>
		<RelativeLayout android:layout_width="fill_parent"
			android:layout_height="wrap_content">
			<TextView android:id="@+id/user_name"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content"
				android:textSize="18dip"
				android:paddingLeft="5dip"
				android:text="用户名"
				android:layout_alignParentLeft="true"
			/>
			<TextView android:id="@+id/time"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content"
				android:textSize="18dip"
				android:paddingRight="5dip"
				android:text="微博发表时间"
				android:layout_alignParentRight="true"
			/>
			<TextView android:id="@+id/status_content"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content"
				android:layout_marginTop="5dip"
				android:textColor="#000000"
				android:textSize="18dip"
				android:text="微博内容"
				android:paddingLeft="5dip"
				android:paddingRight="1dip"
				android:layout_below="@id/time"
			/>
			<ImageView android:id="@+id/picture"
				android:layout_marginTop="5dip"
				android:layout_width="150dip"
				android:layout_height="140dip"
				android:scaleType="fitXY"
				android:layout_below="@id/status_content"
				android:layout_centerHorizontal="true"
				android:visibility="gone"
				android:background="@drawable/edittext_background"
			/>
		</RelativeLayout>
	</LinearLayout>
</LinearLayout>
Adapter继承与BaseAdapter要实现它的一些方法。具体代码如下:

package com.cloay.weibo.adapter;

import java.util.ArrayList;
import java.util.List;

import weibo4android.Status;

import com.cloay.weibo.R;
import com.cloay.weibo.utils.AsyncBitMapLoader;
import com.cloay.weibo.utils.AsyncBitMapLoader.ImageCallback;
import com.cloay.weibo.utils.TextHightUtil;
import com.cloay.weibo.utils.TimeUtil;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * 为主页提供微博数据
 * @author cloay
 * 2012-2-24
 * 下午03:49:15
 */
public class HomeListAdapter extends BaseAdapter{
	private List<Status> listStatus = new ArrayList<Status>();  //微博内容
	private Context context;
	private LayoutInflater layoutInflater;   //item布局
	public int listSize = 16;
	public HomeListAdapter(Context context, List<Status> listStatus){
		this.context = context;
		this.listStatus = listStatus;    
		layoutInflater = LayoutInflater.from(this.context);
	}
	
	@Override
	public int getCount() {   //listView条目数
		if(76 == listSize){
			return 75;
		}
		return listSize;
	}

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

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		int realPosition = getCount() - 1;  //当是最后一个微博时,将更多条目隐藏
		if(75 == getCount()){
			realPosition = getCount();
		}
		if (position < realPosition) {  
            convertView = layoutInflater.inflate(  
                    R.layout.home_list_item, null);  
            final ImageView user_icon = (ImageView) convertView.findViewById(R.id.user_logo);  //用户头像
			AsyncBitMapLoader bitMap = new AsyncBitMapLoader();
			bitMap.loadBitMap(listStatus.get(position).getUser().getProfileImageUrl(), new ImageCallback() {
				//使用异步方式加载用户头像
				@Override
				public void imageLoaded(Bitmap bitmap, String imageUrl) {
					user_icon.setImageBitmap(bitmap);
				}
			});
			TextView user_name = (TextView) convertView.findViewById(R.id.user_name);  //用户名
			//设置用户名并高亮显示
			user_name.setText(TextHightUtil.setTextHight(listStatus.get(position).getUser().getName()));
			
			TextView date = (TextView) convertView.findViewById(R.id.time);  //微博发表时间
			TextView content = (TextView) convertView.findViewById(R.id.status_content);//微博内容
			//将话题、@的用户、链接高亮显示
			String statusText = listStatus.get(position).getText().toString();
			if(null != listStatus.get(position).getRetweeted_status()){
				statusText += listStatus.get(position).getRetweeted_status().getText().toString();
			}
			TextHightUtil.textHighlight(statusText, content);
			String picUrl = listStatus.get(position).getThumbnail_pic();
			if(!"".equals(picUrl)){
				final ImageView picture = (ImageView) convertView.findViewById(R.id.picture);
				picture.setVisibility(View.VISIBLE);
				bitMap.loadBitMap(picUrl, new ImageCallback() {
					//使用异步方式加载微博图片
					@Override
					public void imageLoaded(Bitmap bitmap, String imageUrl) {
						picture.setImageBitmap(bitmap);
					}
				});
			}
			date.setText(TimeUtil.getCreateAt(listStatus.get(position).getCreatedAt()));
        }else{
        	convertView = layoutInflater.inflate(   //显示更多按钮
    				R.layout.home_list_moreitem, null); 
		}
		return convertView;
	}
}

通过上述代码我们就可以为微博主页提供数据了。代码比较简单,就不做解释了!

说明:转载请注明出处!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:235593次
    • 积分:2515
    • 等级:
    • 排名:第14637名
    • 原创:55篇
    • 转载:11篇
    • 译文:2篇
    • 评论:86条
    文章分类
    最新评论