ListView的多布局

package com.bwie.adapter;

import java.util.List;

import com.bwie.bean.Data;
import com.bwie.bean.Image_list;
import com.bwie.bean.Large_image_list;
import com.bwie.bean.Middle_image;
import com.bwie.topnews.R;
import com.nostra13.universalimageloader.core.ImageLoader;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.os.SystemClock;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {
	private Context context;
	private List<Data> list;
	private final int VIDEO = 0;
	private final int ONE_SMALL_IMAGE = 1;
	private final int ONE_LARGE_IMAGE = 2;
	private final int THREE_IMAGE = 3;
	private final int NO_IMAGE = 4;

	public MyAdapter(Context context, List<Data> list) {
		this.context = context;
		this.list = list;
	}

	@Override
	public int getCount() {

		return list.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getItemViewType(int position) {
		Data data = list.get(position);
		List<Image_list> image_list = data.getImage_list();
		List<Large_image_list> large_image_list = data.getLarge_image_list();
		if (data.getHas_video() != null) {
			if (data.getHas_video()) {
				return VIDEO;
			} else if (data.getHas_image()) {
				if (image_list.size() != 0) {
					if (image_list.size() >= 3) {
						return THREE_IMAGE;
					} else {
						return ONE_SMALL_IMAGE;
					}
				} else if (large_image_list != null) {
					if (large_image_list.size() != 0) {
						return ONE_LARGE_IMAGE;
					} else {
						return ONE_SMALL_IMAGE;
					}
				} else {
					return ONE_SMALL_IMAGE;
				}
			} else {
				return NO_IMAGE;
			}

		} else {
			return NO_IMAGE;
		}
	}

	@Override
	public int getViewTypeCount() {
		// TODO Auto-generated method stub
		return 5;
	}

	@Override
	public View getView(int position, View convertview, ViewGroup arg2) {

		ViewHolderNoImage noImage = null;
		ViewHolderOneLargeImage oneLargeImage = null;
		ViewHolderOneSmallImage oneSmallImage = null;
		ViewHolderThreeImage threeImage = null;
		ViewHolderVideo video = null;
		int type = getItemViewType(position);
		Data data = list.get(position);
		if (convertview == null) {
			switch (type) {
			case VIDEO:
				convertview = View.inflate(context, R.layout.listview_itemfour,
						null);
				video = new ViewHolderVideo();
				video.tv_vedio_title = (TextView) convertview
						.findViewById(R.id.lv_four_title);
				// video.tv_title_news=(TextView)
				// convertview.findViewById(R.id.textview_listview_news_video_title);
				// video.sv=(SurfaceView)
				// convertview.findViewById(R.id.sv_video);

				findTextViews(video, convertview);
				convertview.setTag(video);

				break;
			case ONE_SMALL_IMAGE:
				convertview = View.inflate(context,
						R.layout.listview_itemthree, null);
				oneSmallImage = new ViewHolderOneSmallImage();
				oneSmallImage.tv_title_news = (TextView) convertview
						.findViewById(R.id.lv_three_title);
				oneSmallImage.iv_onesmallimage = (ImageView) convertview
						.findViewById(R.id.lv_three_ima);

				findTextViews(oneSmallImage, convertview);
				convertview.setTag(oneSmallImage);
				break;
			case ONE_LARGE_IMAGE:
				convertview = View.inflate(context, R.layout.listview_itemtwo,
						null);
				oneLargeImage = new ViewHolderOneLargeImage();
				oneLargeImage.tv_title_news = (TextView) convertview
						.findViewById(R.id.lv_two_title);
				oneLargeImage.iv_onelargeimage = (ImageView) convertview
						.findViewById(R.id.lv_two_image);

				findTextViews(oneLargeImage, convertview);
				convertview.setTag(oneLargeImage);
				break;
			case THREE_IMAGE:
				convertview = View.inflate(context, R.layout.listview_itemone,
						null);
				threeImage = new ViewHolderThreeImage();
				threeImage.tv_title_news = (TextView) convertview
						.findViewById(R.id.lv_one_title);
				threeImage.iv_threeimage_one = (ImageView) convertview
						.findViewById(R.id.lv_one_ima1);
				threeImage.iv_threeimage_two = (ImageView) convertview
						.findViewById(R.id.lv_one_ima2);
				threeImage.iv_threeimage_three = (ImageView) convertview
						.findViewById(R.id.lv_one_ima3);

				findTextViews(threeImage, convertview);
				convertview.setTag(threeImage);
				break;
			case NO_IMAGE:

				convertview = View.inflate(context, R.layout.listview_itemfour,
						null);
				noImage = new ViewHolderNoImage();
				noImage.tv_title_news = (TextView) convertview
						.findViewById(R.id.lv_four_title);

				findTextViews(noImage, convertview);
				convertview.setTag(noImage);
				break;
			default:

				break;
			}
		} else {
			switch (type) {
			case NO_IMAGE:
				noImage = (ViewHolderNoImage) convertview.getTag();
				break;
			case VIDEO:
				video = (ViewHolderVideo) convertview.getTag();
				break;
			case ONE_LARGE_IMAGE:
				oneLargeImage = (ViewHolderOneLargeImage) convertview.getTag();
				break;
			case ONE_SMALL_IMAGE:
				oneSmallImage = (ViewHolderOneSmallImage) convertview.getTag();
				break;
			case THREE_IMAGE:
				threeImage = (ViewHolderThreeImage) convertview.getTag();
				break;
			default:
				break;
			}

		}
		switch (type) {
		case NO_IMAGE:
			setTextViewInfo(noImage, data);
			noImage.tv_title_news.setText(data.getTitle());
			break;
		case VIDEO:
			// setTextViewInfo(video, data);
			// SurfaceHolder holder = video.sv.getHolder();
			// holder.setType(SurfaceView.);
			// surfaceHolder=surface.getHolder();  //SurfaceHolder是SurfaceView的控制接口
			// surfaceHolder.addCallback(this);
			//   //因为这个类实现了SurfaceHolder.Callback接口,所以回调参数直接this
			// surfaceHolder.setFixedSize(320, 220);  //显示的分辨率,不设置为视频默认
			// surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  //Surface类型
			//
			// play.setOnClickListener(new OnClickListener(){
			// @Override
			// public void onClick(View v) {
			// player.start();
			// }});
			// pause.setOnClickListener(new OnClickListener(){
			// @Override
			// public void onClick(View v) {
			// player.pause();
			// }});
			// stop.setOnClickListener(new OnClickListener(){
			// @Override
			// public void onClick(View v) {
			// player.stop();
			// }});
			// }
			//
			// @Override
			// public void surfaceChanged(SurfaceHolder arg0, int arg1, int
			// arg2, int arg3) {
			// }
			//
			// @Override
			// public void surfaceCreated(SurfaceHolder arg0) {
			// //必须在surface创建后才能初始化MediaPlayer,否则不会显示图像
			// player=new MediaPlayer();
			// player.setAudioStreamType(AudioManager.STREAM_MUSIC);
			// player.setDisplay(surfaceHolder);
			// //设置显示视频显示在SurfaceView上
			// try {
			// player.setDataSource("/sdcard/3.mp4");
			// player.prepare();
			// } catch (Exception e) {
			// e.printStackTrace();
			// }
			// }
			video.tv_vedio_title.setText(data.getTitle());
			break;
		case ONE_LARGE_IMAGE:
			setTextViewInfo(oneLargeImage, data);
			oneLargeImage.tv_title_news.setText(data.getTitle());
			ImageLoader.getInstance().displayImage(
					data.getLarge_image_list().get(0).getUrl(),
					oneLargeImage.iv_onelargeimage);
			break;
		case ONE_SMALL_IMAGE:
			setTextViewInfo(oneSmallImage, data);
			oneSmallImage.tv_title_news.setText(data.getTitle());
			ImageLoader.getInstance().displayImage(
					data.getMiddle_image().getUrl(),
					oneSmallImage.iv_onesmallimage);
			break;
		case THREE_IMAGE:
			setTextViewInfo(threeImage, data);
			threeImage.tv_title_news.setText(data.getTitle());
			ImageLoader.getInstance().displayImage(
					data.getImage_list().get(0).getUrl(),
					threeImage.iv_threeimage_one);
			ImageLoader.getInstance().displayImage(
					data.getImage_list().get(1).getUrl(),
					threeImage.iv_threeimage_two);
			ImageLoader.getInstance().displayImage(
					data.getImage_list().get(2).getUrl(),
					threeImage.iv_threeimage_three);
			break;
		default:
			break;
		}
		return convertview;

	}

	/**
	 * 找到通用的控件
	 * 
	 * @param vh
	 * @param convertview
	 */
	public void findTextViews(ViewHolder vh, View convertview) {
		vh.tv_label_news = (TextView) convertview
				.findViewById(R.id.textView_listview_news_label);

		vh.tv_comment_news = (TextView) convertview
				.findViewById(R.id.textView_listview_news_comment);

		vh.tv_publishtime_news = (TextView) convertview
				.findViewById(R.id.textView_listview_news_publishtime);
		vh.tv_source_news = (TextView) convertview
				.findViewById(R.id.textView_listview_news_source);
		vh.btn_list_more = (ImageView) convertview
				.findViewById(R.id.btn_listview_more);

	}

	public void setTextViewInfo(ViewHolder vh, Data data) {

		vh.tv_comment_news.setText(data.getComment_count() + "评论");

		if (!("热".equals(data.getLabel()))) {
			vh.tv_label_news.setTextColor(Color.RED);
		}
		vh.tv_label_news.setText(data.getLabel());
		vh.tv_publishtime_news.setText(getTime(data.getPublish_time()));
		vh.tv_source_news.setText(data.getSource());
		// 按钮的点击事件
		vh.btn_list_more.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				MyAlertDialog();
			}
		});
	}

	public void MyAlertDialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		builder.setTitle("Pick a color");
		builder.create();
		builder.show();
	}

	class ViewHolderNoImage extends ViewHolder {

	}

	class ViewHolderOneSmallImage extends ViewHolder {
		ImageView iv_onesmallimage;
	}

	class ViewHolderOneLargeImage extends ViewHolder {
		ImageView iv_onelargeimage;
	}

	class ViewHolderThreeImage extends ViewHolder {
		ImageView iv_threeimage_one;
		ImageView iv_threeimage_two;
		ImageView iv_threeimage_three;
	}

	class ViewHolderVideo extends ViewHolder {
		TextView tv_vedio_title;
		SurfaceView sv;
	}

	class ViewHolder {
		TextView tv_title_news;
		TextView tv_label_news;
		TextView tv_source_news;
		TextView tv_publishtime_news;
		TextView tv_comment_news;
		ImageView btn_list_more;

	}

	/**
	 * 时间
	 * 
	 * @param time
	 * @return
	 */
	public String getTime(int time) {
		int second = time / 1000;
		if (second > 60) {
			int minute = second / 60;
			if (minute > 60) {
				int hour = minute / 60;
				if (hour > 24) {
					int day = hour / 24;
					if (day > 24) {
						return "很久前";
					} else {
						return day + "天前";
					}
				} else {
					return hour + "小时前";
				}
			} else {
				return minute + "分钟前";
			}
		} else {
			return second + "秒前";
		}

	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用WPF ListView的ItemsPanel属性来指定ListView项的布局方式。以下是一种实现横向布局的方法: 1. 在XAML中定义ListView,并将ItemsPanel属性设置为StackPanel: ``` <ListView ItemsSource="{Binding Items}"> <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" /> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> ``` 2. 将StackPanel的Orientation属性设置为Horizontal。 这样,ListView的项将以横向布局方式呈现。你可以根据需要调整其它属性,例如间距、对齐方式等。 ### 回答2: WPF(Windows Presentation Foundation)是微软公司推出的用于创建Windows应用程序的框架。ListView是WPF中常用的控件之一,用于显示一组数据项的列表。默认情况下,ListView布局是纵向的,即数据项按垂直方向排列。如果需要实现ListView的横向布局,可以通过以下几个步骤来实现。 首先,在XAML文件中声明一个ListView控件,并设置其Orientation属性为Horizontal,这将使ListView变为横向布局。 ```csharp <ListView Width="500" Height="200" Orientation="Horizontal"> <!-- 在此处添加数据模板和数据绑定 --> </ListView> ``` 接下来,需要为ListView指定数据模板和数据绑定,以展示列表中的数据项。 ```csharp <ListView Width="500" Height="200" Orientation="Horizontal"> <ListView.ItemTemplate> <DataTemplate> <!-- 在此处定义数据项的布局和样式 --> </DataTemplate> </ListView.ItemTemplate> </ListView> ``` 在DataTemplate中可以定义数据项的布局和样式,例如可以使用StackPanel来水平排列数据项的内容。 ```csharp <ListView Width="500" Height="200" Orientation="Horizontal"> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <!-- 在此处添加数据项的内容 --> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> ``` 最后,在代码中通过数据绑定将数据项与ListView关联起来,以实现数据的显示和更新。 综上所述,通过设置ListView的Orientation属性为Horizontal,并在DataTemplate中使用StackPanel来横向布局数据项的内容,再通过数据绑定将数据与ListView关联,即可实现WPF中ListView的横向布局。 ### 回答3: WPF中的ListView控件默认的布局方式是纵向布局,即列表项垂直排列。如果想要实现ListView的横向布局,可以通过修改ItemPanel的布局方式来实现。 首先,我们需要把ListView的ItemsPanel修改为一个横向布局的面板,比如使用WrapPanel或者UniformGrid。通过修改ListView的ItemPanel属性,可以将默认的ItemsPanel修改为横向布局的面板,如下所示: ``` <ListView> <ListView.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </ListView.ItemsPanel> <!--其他代码--> </ListView> ``` 这样,ListView中的列表项就会横向排列了。但是需要注意的是,如果内容过多,会导致横向排列的列表项超出窗口范围,因此还需要根据实际情况设置ListView的宽度或者调整WrapPanel的宽度来适应布局。 另外,还可以通过修改ListView的ItemContainerStyle来定制列表项的样式,使其适应横向布局。比如设置列表项的最小宽度、高度、边距等,以及设置水平对齐方式等。 总之,通过修改ListView的ItemsPanel和ItemContainerStyle,可以实现ListView的横向布局,使列表项横向排列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值