package net.oschina.app.adapter;
import java.util.List;
import net.oschina.app.R;
import net.oschina.app.bean.Comment;
import net.oschina.app.bean.Comment.Refer;
import net.oschina.app.bean.Comment.Reply;
import net.oschina.app.common.BitmapManager;
import net.oschina.app.common.StringUtils;
import net.oschina.app.common.UIHelper;
import net.oschina.app.widget.LinkView;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* 用户评论Adapter类
* @author liux (http://my.oschina.net/liux)
* @version 1.0
* @created 2012-3-21
*/
public class ListViewCommentAdapter extends BaseAdapter {
private Context context;//运行上下文
private List<Comment> listItems;//数据集合
private LayoutInflater listContainer;//视图容器
private int itemViewResource;//自定义项视图源
private BitmapManager bmpManager;
static class ListItemView{ //自定义控件集合
public ImageView face;
public TextView name;
public TextView date;
public LinkView content;
public TextView client;
public LinearLayout relies;
public LinearLayout refers;
}
/**
* 实例化Adapter
* @param context
* @param data
* @param resource
*/
public ListViewCommentAdapter(Context context, List<Comment> data,int resource) {
this.context = context;
this.listContainer = LayoutInflater.from(context); //创建视图容器并设置上下文
this.itemViewResource = resource;
this.listItems = data;
this.bmpManager = new BitmapManager(BitmapFactory.decodeResource(context.getResources(), R.drawable.widget_dface_loading));
}
public int getCount() {
return listItems.size();
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
/**
* ListView Item设置
*/
public View getView(int position, View convertView, ViewGroup parent) {
//Log.d("method", "getView");
//自定义视图
ListItemView listItemView = null;
if (convertView == null) {
//获取list_item布局文件的视图
convertView = listContainer.inflate(this.itemViewResource, null);
listItemView = new ListItemView();
//获取控件对象
listItemView.face = (ImageView)convertView.findViewById(R.id.comment_listitem_userface);
listItemView.name = (TextView)convertView.findViewById(R.id.comment_listitem_username);
listItemView.date = (TextView)convertView.findViewById(R.id.comment_listitem_date);
listItemView.content = (LinkView)convertView.findViewById(R.id.comment_listitem_content);
listItemView.client= (TextView)convertView.findViewById(R.id.comment_listitem_client);
listItemView.relies = (LinearLayout)convertView.findViewById(R.id.comment_listitem_relies);
listItemView.refers = (LinearLayout)convertView.findViewById(R.id.comment_listitem_refers);
//设置控件集到convertView
convertView.setTag(listItemView);
}else {
listItemView = (ListItemView)convertView.getTag();
}
//设置文字和图片
Comment comment = listItems.get(position);
String faceURL = comment.getFace();
if(faceURL.endsWith("portrait.gif") || StringUtils.isEmpty(faceURL)){
listItemView.face.setImageResource(R.drawable.widget_dface);
}else{
bmpManager.loadBitmap(faceURL, listItemView.face);
}
listItemView.face.setTag(comment);//设置隐藏参数(实体类)
listItemView.face.setOnClickListener(faceClickListener);
listItemView.name.setText(comment.getAuthor());
listItemView.date.setText(StringUtils.friendly_time(comment.getPubDate()));
listItemView.content.setText(comment.getContent());
listItemView.content.parseLinkText();
listItemView.content.setTag(comment);//设置隐藏参数(实体类)
switch(comment.getAppClient())
{
default:
listItemView.client.setText("");
break;
case Comment.CLIENT_MOBILE:
listItemView.client.setText("来自:手机");
break;
case Comment.CLIENT_ANDROID:
listItemView.client.setText("来自:Android");
break;
case Comment.CLIENT_IPHONE:
listItemView.client.setText("来自:iPhone");
break;
case Comment.CLIENT_WINDOWS_PHONE:
listItemView.client.setText("来自:Windows Phone");
break;
}
if(StringUtils.isEmpty(listItemView.client.getText().toString()))
listItemView.client.setVisibility(View.GONE);
else
listItemView.client.setVisibility(View.VISIBLE);
listItemView.relies.setVisibility(View.GONE);
listItemView.relies.removeAllViews();//先清空
if(comment.getReplies().size() > 0){
//评论数目
View view = listContainer.inflate(R.layout.comment_reply, null);
TextView tv = (TextView)view.findViewById(R.id.comment_reply_content);
tv.setText(context.getString(R.string.comment_reply_title, comment.getReplies().size()));
listItemView.relies.addView(view);
//评论内容
for(Reply reply : comment.getReplies()){
View view2 = listContainer.inflate(R.layout.comment_reply, null);
TextView tv2 = (TextView)view2.findViewById(R.id.comment_reply_content);
tv2.setText(reply.rauthor+"("+StringUtils.friendly_time(reply.rpubDate)+"):"+reply.rcontent);
listItemView.relies.addView(view2);
}
listItemView.relies.setVisibility(View.VISIBLE);
}
listItemView.refers.setVisibility(View.GONE);
listItemView.refers.removeAllViews();//先清空
if(comment.getRefers().size() > 0){
//引用内容
for(Refer refer : comment.getRefers()){
View view = listContainer.inflate(R.layout.comment_refer, null);
TextView title = (TextView)view.findViewById(R.id.comment_refer_title);
TextView body = (TextView)view.findViewById(R.id.comment_refer_body);
title.setText(refer.refertitle);
body.setText(refer.referbody);
listItemView.refers.addView(view);
}
listItemView.refers.setVisibility(View.VISIBLE);
}
return convertView;
}
private View.OnClickListener faceClickListener = new View.OnClickListener(){
public void onClick(View v) {
Comment comment = (Comment)v.getTag();
UIHelper.showUserCenter(v.getContext(), comment.getAuthorId(), comment.getAuthor());
}
};
}