package com.topnews.adapter; import java.util.ArrayList; import java.util.List; import java.util.zip.Inflater; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.topnews.R; import com.topnews.bean.NewsEntity; import com.topnews.tool.Constants; import com.topnews.tool.Options; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.ColorDrawable; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; public class NewsAdapter extends BaseAdapter { ArrayList<NewsEntity> newsList; Activity activity; LayoutInflater inflater = null; protected ImageLoader imageLoader = ImageLoader.getInstance(); DisplayImageOptions options; /** �����ĸ���ѡ��� */ private PopupWindow popupWindow; public NewsAdapter(Activity activity, ArrayList<NewsEntity> newsList) { this.activity = activity; this.newsList = newsList; inflater = LayoutInflater.from(activity); options = Options.getListOptions(); initPopWindow(); } @Override public int getCount() { // TODO Auto-generated method stub return newsList == null ? 0 : newsList.size(); } @Override public NewsEntity getItem(int position) { // TODO Auto-generated method stub if (newsList != null && newsList.size() != 0) { return newsList.get(position); } return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder mHolder; View view = convertView; if (view == null) { view = inflater.inflate(R.layout.list_item, null); mHolder = new ViewHolder(); mHolder.item_layout = (RelativeLayout)view.findViewById(R.id.item_layout); mHolder.comment_layout = (RelativeLayout)view.findViewById(R.id.comment_layout); mHolder.item_title = (TextView)view.findViewById(R.id.item_title); mHolder.item_source = (TextView)view.findViewById(R.id.item_source); mHolder.list_item_local = (TextView)view.findViewById(R.id.list_item_local); mHolder.comment_count = (TextView)view.findViewById(R.id.comment_count); mHolder.publish_time = (TextView)view.findViewById(R.id.publish_time); mHolder.item_abstract = (TextView)view.findViewById(R.id.item_abstract); mHolder.alt_mark = (ImageView)view.findViewById(R.id.alt_mark); mHolder.right_image = (ImageView)view.findViewById(R.id.right_image); mHolder.item_image_layout = (LinearLayout)view.findViewById(R.id.item_image_layout); mHolder.item_image_0 = (ImageView)view.findViewById(R.id.item_image_0); mHolder.item_image_1 = (ImageView)view.findViewById(R.id.item_image_1); mHolder.item_image_2 = (ImageView)view.findViewById(R.id.item_image_2); mHolder.large_image = (ImageView)view.findViewById(R.id.large_image); mHolder.popicon = (ImageView)view.findViewById(R.id.popicon); mHolder.comment_content = (TextView)view.findViewById(R.id.comment_content); mHolder.right_padding_view = (View)view.findViewById(R.id.right_padding_view); view.setTag(mHolder); } else { mHolder = (ViewHolder) view.getTag(); } //��ȡposition��Ӧ������ NewsEntity news = getItem(position); mHolder.item_title.setText(news.getTitle()); mHolder.item_source.setText(news.getSource()); mHolder.comment_count.setText("����" + news.getCommentNum()); mHolder.publish_time.setText(news.getPublishTime() + "Сʱǰ"); List<String> imgUrlList = news.getPicList(); mHolder.popicon.setVisibility(View.VISIBLE); mHolder.comment_count.setVisibility(View.VISIBLE); mHolder.right_padding_view.setVisibility(View.VISIBLE); if(imgUrlList !=null && imgUrlList.size() !=0){ if(imgUrlList.size() == 1){ mHolder.item_image_layout.setVisibility(View.GONE); //�Ƿ��Ǵ�ͼ if(news.getIsLarge()){ mHolder.large_image.setVisibility(View.VISIBLE); mHolder.right_image.setVisibility(View.GONE); imageLoader.displayImage(imgUrlList.get(0), mHolder.large_image, options); mHolder.popicon.setVisibility(View.GONE); mHolder.comment_count.setVisibility(View.GONE); mHolder.right_padding_view.setVisibility(View.GONE); }else{ mHolder.large_image.setVisibility(View.GONE); mHolder.right_image.setVisibility(View.VISIBLE); imageLoader.displayImage(imgUrlList.get(0), mHolder.right_image, options); } }else{ mHolder.large_image.setVisibility(View.GONE); mHolder.right_image.setVisibility(View.GONE); mHolder.item_image_layout.setVisibility(View.VISIBLE); imageLoader.displayImage(imgUrlList.get(0), mHolder.item_image_0, options); imageLoader.displayImage(imgUrlList.get(1), mHolder.item_image_1, options); imageLoader.displayImage(imgUrlList.get(2), mHolder.item_image_2, options); } }else{ mHolder.right_image.setVisibility(View.GONE); mHolder.item_image_layout.setVisibility(View.GONE); } int markResID = getAltMarkResID(news.getMark(),news.getCollectStatus()); if(markResID != -1){ mHolder.alt_mark.setVisibility(View.VISIBLE); mHolder.alt_mark.setImageResource(markResID); }else{ mHolder.alt_mark.setVisibility(View.GONE); } //�жϸ����Ÿ����Ƿ�Ϊ�� if (!TextUtils.isEmpty(news.getNewsAbstract())) { mHolder.item_abstract.setVisibility(View.VISIBLE); mHolder.item_abstract.setText(news.getNewsAbstract()); } else { mHolder.item_abstract.setVisibility(View.GONE); } //�жϸ������Ƿ��������ǵģ��ƹ�ȣ�Ϊ�վ������� if(!TextUtils.isEmpty(news.getLocal())){ mHolder.list_item_local.setVisibility(View.VISIBLE); mHolder.list_item_local.setText(news.getLocal()); }else{ mHolder.list_item_local.setVisibility(View.GONE); } //�ж������ֶ��Ƿ�Ϊ�գ���Ϊ����ʾ��Ӧ���� if(!TextUtils.isEmpty(news.getComment())){ //news.getLocal() != null && mHolder.comment_layout.setVisibility(View.VISIBLE); mHolder.comment_content.setText(news.getComment()); }else{ mHolder.comment_layout.setVisibility(View.GONE); } //�жϸ������Ƿ��Ѷ� if(!news.getReadStatus()){ mHolder.item_layout.setSelected(true); }else{ mHolder.item_layout.setSelected(false); } //����+��ť���Ч�� mHolder.popicon.setOnClickListener(new popAction(position)); return view; } static class ViewHolder { RelativeLayout item_layout; //title TextView item_title; //ͼƬԴ TextView item_source; //�����ƹ�֮��ı�ǩ TextView list_item_local; //�������� TextView comment_count; //����ʱ�� TextView publish_time; //����ժҪ TextView item_abstract; //���Ϸ�TAG���ͼƬ ImageView alt_mark; //�ұ�ͼƬ ImageView right_image; //3��ͼƬ���� LinearLayout item_image_layout; //3��ͼƬʱ��IJ��� ImageView item_image_0; ImageView item_image_1; ImageView item_image_2; //��ͼ��ͼƬ�Ļ����� ImageView large_image; //pop��ť ImageView popicon; //���۲��� RelativeLayout comment_layout; TextView comment_content; //paddingview View right_padding_view; } /** �������Ի�ȡ��Ӧ����ԴID */ public int getAltMarkResID(int mark,boolean isfavor){ if(isfavor){ return R.drawable.ic_mark_favor; } switch (mark) { case Constants.mark_recom: return R.drawable.ic_mark_recommend; case Constants.mark_hot: return R.drawable.ic_mark_hot; case Constants.mark_frist: return R.drawable.ic_mark_first; case Constants.mark_exclusive: return R.drawable.ic_mark_exclusive; case Constants.mark_favor: return R.drawable.ic_mark_favor; default: break; } return -1; } /** popWindow �رհ�ť */ private ImageView btn_pop_close; /** * ��ʼ��������pop * */ private void initPopWindow() { View popView = inflater.inflate(R.layout.list_item_pop, null); popupWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); popupWindow.setBackgroundDrawable(new ColorDrawable(0)); //����popwindow���ֺ���ʧ���� popupWindow.setAnimationStyle(R.style.PopMenuAnimation); btn_pop_close = (ImageView) popView.findViewById(R.id.btn_pop_close); } /** * ��ʾpopWindow * */ public void showPop(View parent, int x, int y,int postion) { //����popwindow��ʾλ�� popupWindow.showAtLocation(parent, 0, x, y); //��ȡpopwindow���� popupWindow.setFocusable(true); //����popwindow�������������򣬱�رա� popupWindow.setOutsideTouchable(true); popupWindow.update(); if (popupWindow.isShowing()) { } btn_pop_close.setOnClickListener(new OnClickListener() { public void onClick(View paramView) { popupWindow.dismiss(); } }); } /** * ÿ��ITEM��more��ť��Ӧ�ĵ������ * */ public class popAction implements OnClickListener{ int position; public popAction(int position){ this.position = position; } @Override public void onClick(View v) { int[] arrayOfInt = new int[2]; //��ȡ�����ť������ v.getLocationOnScreen(arrayOfInt); int x = arrayOfInt[0]; int y = arrayOfInt[1]; showPop(v, x , y, position); } } }