/* * Copyright (c) 2015, 张涛. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kymjs.blog.adapter; import java.util.ArrayList; import java.util.List; import org.kymjs.blog.R; import org.kymjs.blog.domain.EverydayMessage; import org.kymjs.blog.utils.UIHelper; import org.kymjs.kjframe.KJBitmap; import org.kymjs.kjframe.utils.StringUtils; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; /** * 每日推送界面列表适配器 * * @author kymjs (https://www.kymjs.com) * @since 2015-3 */ public class WeChatAdapter extends BaseAdapter { private final Context cxt; private List<EverydayMessage> datas; private final KJBitmap kjb = new KJBitmap(); public WeChatAdapter(Context cxt, List<EverydayMessage> datas) { this.cxt = cxt; if (datas == null) { datas = new ArrayList<EverydayMessage>(0); } this.datas = datas; } public void refresh(List<EverydayMessage> datas) { if (datas == null) { datas = new ArrayList<EverydayMessage>(0); } this.datas = datas; notifyDataSetChanged(); } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } static class ViewHolder { ImageView img; TextView title; RelativeLayout layoutHead; TextView singleTitle; ImageView singleImg; TextView singleDescription; RelativeLayout singleLayout; LinearLayout root; TextView tiem; } /** * 变量命名:多图文消息中分title和item,title指代第一项那个大的列表项,而item表示小的列表项<br> * 单图文消息中只有标题,图片,摘要 */ @Override public View getView(int position, View v, ViewGroup parent) { ViewHolder holder = null; EverydayMessage data = datas.get(position); int itemCount = 0; // 标题下面的栏目共有多少个 if (v == null) { v = View.inflate(cxt, R.layout.item_list_wechat, null); holder = new ViewHolder(); holder.img = (ImageView) v.findViewById(R.id.item_wechat_img_head); holder.title = (TextView) v.findViewById(R.id.item_wechat_tv_head); holder.layoutHead = (RelativeLayout) v .findViewById(R.id.item_wechat_layout_head); holder.singleTitle = (TextView) v .findViewById(R.id.item_wechat_tv_single); holder.singleDescription = (TextView) v .findViewById(R.id.item_wechat_tv_single_content); holder.singleImg = (ImageView) v .findViewById(R.id.item_wechat_img_single); holder.singleLayout = (RelativeLayout) v .findViewById(R.id.item_wechat_layout_single); holder.root = (LinearLayout) v; holder.tiem = (TextView) v.findViewById(R.id.item_wechat_time); v.setTag(holder); } else { holder = (ViewHolder) v.getTag(); itemCount = holder.root.getChildCount() - 3; } if (data.isHasItem()) { // 多图文消息 holder.singleLayout.setVisibility(View.GONE); holder.layoutHead.setVisibility(View.VISIBLE); holder.title.setText(data.getTitle()); kjb.display(holder.img, data.getImgUrl()); initMsgItem(holder.root, itemCount, data); holder.layoutHead .setOnClickListener(getItemMessageClickListener(data .getUrl())); } else { // 单图文消息 holder.singleLayout.setVisibility(View.VISIBLE); holder.layoutHead.setVisibility(View.GONE); holder.singleDescription.setText(data.getDescription()); holder.singleTitle.setText(data.getTitle()); kjb.display(holder.singleImg, data.getImgUrl()); holder.singleLayout .setOnClickListener(getItemMessageClickListener(data .getUrl())); } holder.tiem.setText(StringUtils.friendlyTime(data.getTime())); return v; } /** * 初始化多图文消息中下半部分 */ private void initMsgItem(LinearLayout root, int itemCount, EverydayMessage data) { // 已有的layout直接复用修改数据 for (int i = 0; i < itemCount; i++) { RelativeLayout itemView = (RelativeLayout) root.getChildAt(i + 3); initItem(data, i, itemView); } if (data.getUrlList().size() == itemCount) { // 正好容纳 return; } else if (data.getUrlList().size() > itemCount) { // 当需要额外添加item for (int i = itemCount; i < data.getUrlList().size(); i++) { RelativeLayout itemView = (RelativeLayout) View.inflate(cxt, R.layout.item_wechat_list, null); initItem(data, i, itemView); root.addView(itemView); } } else { // 需要移除item for (int i = itemCount; i < data.getUrlList().size(); i++) { root.removeViewAt(i); } } } /** * 初始化多图文消息的item * * @param data * @param i * @param itemView */ private void initItem(EverydayMessage data, int i, RelativeLayout itemView) { ImageView itemImg = (ImageView) itemView.getChildAt(0); TextView itemText = (TextView) itemView.getChildAt(1); kjb.display(itemImg, data.getImageUrlList().get(i)); itemText.setText(data.getTitleList().get(i)); itemView.setOnClickListener(getItemMessageClickListener(data .getUrlList().get(i))); } /** * 当点击一个标题时,跳转到浏览器显示参数地址 * * @param url * 要显示的url * @return 点击事件监听器 */ private OnClickListener getItemMessageClickListener(final String url) { return new OnClickListener() { @Override public void onClick(View v) { UIHelper.toBrowser(cxt, url); } }; } }