package com.bob.digcsdn.adapters;
import android.content.Context;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bob.digcsdn.R;
import com.bob.digcsdn.models.Blog;
import com.bob.digcsdn.utils.Constants;
import com.bob.digcsdn.utils.FileUtil;
import com.bob.digcsdn.utils.ImageLoading;
import com.bob.digcsdn.utils.MyTagHandler;
import java.util.ArrayList;
import java.util.List;
/**
* 博客内容适配器
* <p/>
* Created by bob on 15-6-14.
*/
public class BlogDetailAdapter extends BaseAdapter {
private ViewHolder holder;
private LayoutInflater layoutInflater;
private Context context;
private List<Blog> list;
private ImageLoading imageLoader;
public BlogDetailAdapter(Context context) {
super();
this.context = context;
layoutInflater = LayoutInflater.from(context);
list = new ArrayList<>();
imageLoader = ImageLoading.getInstance();
}
public void setList(List<Blog> list) {
this.list = list;
}
public void addList(List<Blog> list) {
this.list.addAll(list);
}
public void clearList() {
this.list.clear();
}
public List<Blog> getList() {
return list;
}
public void removeItem(int position) {
if (list.size() > 0) {
list.remove(position);
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
/**
* 这里的主要实现方式是:将blog分为多个部分,每个部分由不同的条目布局显示,也就相当于listview具有多种条目布局
* 加载的时候根据对应
*
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {//获取条目布局及view对象
Blog item = list.get(position);//在初始化holder的时候,需要使用到具体条目的类型
if (null == convertView) {
holder = new ViewHolder();
switch (item.getState()) {
case Constants.DEF_BLOG_ITEM_TYPE.TITLE:// 显示标题
convertView = layoutInflater.inflate(
R.layout.article_detail_title_item, null);
holder.content = (TextView) convertView.findViewById(R.id.text);
break;
case Constants.DEF_BLOG_ITEM_TYPE.SUMMARY: // 摘要
convertView = layoutInflater.inflate(
R.layout.article_detail_summary_item, null);
holder.content = (TextView) convertView.findViewById(R.id.text);
break;
case Constants.DEF_BLOG_ITEM_TYPE.CONTENT: // 内容
convertView = layoutInflater.inflate(
R.layout.article_detail_item, null);
holder.content = (TextView) convertView.findViewById(R.id.text);
break;
case Constants.DEF_BLOG_ITEM_TYPE.IMG: // 图片
convertView = layoutInflater.inflate(
R.layout.article_detail_img_item, null);
holder.image = (ImageView) convertView
.findViewById(R.id.imageView);
break;
case Constants.DEF_BLOG_ITEM_TYPE.BOLD_TITLE: // 加粗标题
convertView = layoutInflater.inflate(
R.layout.article_detail_bold_title_item, null);
holder.content = (TextView) convertView.findViewById(R.id.text);
break;
case Constants.DEF_BLOG_ITEM_TYPE.CODE: // 代码
convertView = layoutInflater.inflate(
R.layout.article_detail_code_item, null);
holder.code = (WebView) convertView
.findViewById(R.id.code_view);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// System.out.println(item.getContent());
if (null != item) {
switch (item.getState()) {
case Constants.DEF_BLOG_ITEM_TYPE.IMG: // 图片,异步加载
imageLoader.loadImage(item.getImgLink(), holder.image, R.drawable.ic_default, R.drawable.ic_default);
break;
case Constants.DEF_BLOG_ITEM_TYPE.CODE: // 代码,格式显示
// 读取代码文件和模板文件
String code = item.getContent();//获取代码内容
String template = FileUtil.getFileContent(context, "code.html");
// 生成代码模板
String html = template.replace("{{code}}", code);//将代码内容替换进去
holder.code.getSettings().setDefaultTextEncodingName("utf-8");
holder.code.getSettings().setSupportZoom(true);
holder.code.getSettings().setBuiltInZoomControls(true);
// holder.code.loadUrl("file:///android_asset/code.html");
holder.code.loadDataWithBaseURL("file:///android_asset/", html,
"text/html", "utf-8", null);
break;
default://普通文本,这点不太懂
holder.content.setText(Html.fromHtml(item.getContent(), null,
new MyTagHandler()));
break;
}
}
return convertView;
}
@Override
public int getViewTypeCount() {
return 6;
}
@Override
public int getItemViewType(int position) {
switch (list.get(position).getState()) {
case Constants.DEF_BLOG_ITEM_TYPE.TITLE:
return 0;
case Constants.DEF_BLOG_ITEM_TYPE.SUMMARY:
return 1;
case Constants.DEF_BLOG_ITEM_TYPE.CONTENT:
return 2;
case Constants.DEF_BLOG_ITEM_TYPE.IMG:
return 3;
case Constants.DEF_BLOG_ITEM_TYPE.BOLD_TITLE:
return 4;
case Constants.DEF_BLOG_ITEM_TYPE.CODE:
return 5;
}
return 1;//默认返回概要
}
@Override
public boolean isEnabled(int position) {
switch (list.get(position).getState()) {
case Constants.DEF_BLOG_ITEM_TYPE.IMG:
return true;
default:
return false;
}
}
private class ViewHolder {
TextView id;//暂时无用,需要的话,可以看情况加上
TextView date;
TextView title;
TextView content;
ImageView image;
WebView code;
}
}