listview不同的item展示

本文介绍了一个使用XListView展示动态获取JSON数据的应用案例,包括如何通过HTTP请求获取JSON数据、解析JSON数据并填充到不同的视图类型中,以及如何实现下拉刷新和上拉加载更多的功能。
private String json;
	private XListView list;
	private Myname adapter;
	private final static int firstType = 0;
	private final static int twoType = 1;
	private final static int threeType = 2;
	private ArrayList<Data> datas = new ArrayList<Data>();
	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			if (adapter == null) {
				adapter = new Myname();
				list.setAdapter(adapter);
			} else {
				adapter = new Myname();
				list.setAdapter(adapter);
				adapter.notifyDataSetChanged();
			}
		};
	};
	private String path;
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = View.inflate(getActivity(), R.layout.fragment1, null);
		list = (XListView) view.findViewById(R.id.lv);
		list.setOnItemClickListener(listener);
		httpjson();
		//acti传递的参数
		Bundle bundle=getArguments();
		path=bundle.getString("urls");		
		list.setPullLoadEnable(true);
		list.setPullRefreshEnable(true);
		list.setXListViewListener(new IXListViewListener() {			
			@Override
			public void onRefresh() {
				httpjson();
				stopLoadOrRefresh();// 停止加载
			}
			
			@Override
			public void onLoadMore() {
				httpjson();
				stopLoadOrRefresh();// 停止加载
			}
		});
		return view;
	}
	protected void stopLoadOrRefresh() {
		list.stopLoadMore();
		list.stopRefresh();
		list.setRefreshTime("11:15");
	}
	//传到webview
	OnItemClickListener listener=new OnItemClickListener() {
		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			Intent intent=new Intent(getActivity(),WebActivity.class);
			intent.putExtra("http", datas.get(arg2-1).article_url);
			startActivity(intent);
		}
	};
	//解析json
	private void httpjson() {
		new Thread() {
			public void run() {
				try {
					HttpClient client = new DefaultHttpClient();
					HttpGet get = new HttpGet(path);
					HttpResponse response = client.execute(get);
					if(response.getStatusLine().getStatusCode()==200){
						HttpEntity entity=response.getEntity();
						json=EntityUtils.toString(entity);
						System.out.println(json.toString());
					}
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				Gson gson=new Gson();
				Tou t=gson.fromJson(json, Tou.class);
				datas=t.data;
				Message msg=new Message();
				msg.obj=datas;
				handler.sendMessage(msg);
			};
		}.start();

	}
	public class Myname extends BaseAdapter {
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return datas.size();
		}

		@Override
		public int getItemViewType(int position) {
			Data dt=datas.get(position);
			boolean has_image = dt.has_image;
		    if (has_image == false) {
		        return 0;
		    }
		    if (has_image && dt.image_list.size() == 3) {
		        return 2;
		    } else {
		        return 1;
		    }
		}
		@Override
		public int getViewTypeCount() {
			// TODO Auto-generated method stub
			return 3;
		}
		@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 View getView(int position, View coverView, ViewGroup arg2) {
			ViewHolder1 holder1=null;
			ViewHolder2 holder2=null;
			ViewHolder3 holder3=null;
			int type=getItemViewType(position);
			Data dt=datas.get(position);
			if(coverView==null){
				switch (type) {
			case firstType:
				coverView=View.inflate(getActivity(), R.layout.firsttype, null);
				holder1=new ViewHolder1();
				holder1.title=(TextView) coverView.findViewById(R.id.title);
				holder1.media_name=(TextView) coverView.findViewById(R.id.media_name);
				coverView.setTag(holder1);
				break;
			case twoType:
				coverView=View.inflate(getActivity(), R.layout.twotype, null);
				holder2=new ViewHolder2();
				holder2.title2=(TextView) coverView.findViewById(R.id.title2);
				holder2.media_name2=(TextView) coverView.findViewById(R.id.media_name2);
				holder2.middle_image=(ImageView) coverView.findViewById(R.id.middle_image);
				coverView.setTag(holder2);
				break;
			case threeType:
				coverView=View.inflate(getActivity(), R.layout.threetype, null);
				holder3=new ViewHolder3();
				holder3.title3=(TextView) coverView.findViewById(R.id.title3);
				holder3.lv1=(ImageView) coverView.findViewById(R.id.lv1);
				holder3.lv2=(ImageView) coverView.findViewById(R.id.lv2);
				holder3.lv3=(ImageView) coverView.findViewById(R.id.lv3);
				holder3.media=(TextView) coverView.findViewById(R.id.media_name3);
				coverView.setTag(holder3);
				break;
			   }
			}else{
				switch (type) {
				case firstType:
					holder1=(ViewHolder1) coverView.getTag();
					break;
				case twoType:
					holder2=(ViewHolder2) coverView.getTag();
					break;
				case threeType:
					holder3=(ViewHolder3) coverView.getTag();
					break;
				}
			}
			switch (type) {
			case firstType:
				holder1.title.setText(dt.title);
				holder1.media_name.setText(dt.media_name);
				break;
			case twoType:
				holder2.title2.setText(dt.title);
				holder2.media_name2.setText(dt.media_name);
				ImageLoader.getInstance().displayImage(dt.middle_image.url, holder2.middle_image);
				break;
			case threeType:
				holder3.title3.setText(dt.title);
				holder3.media.setText(dt.media_name+"");
				ImageLoader.getInstance().displayImage(dt.image_list.get(0).url, holder3.lv1);
				ImageLoader.getInstance().displayImage(dt.image_list.get(1).url, holder3.lv2);
				ImageLoader.getInstance().displayImage(dt.image_list.get(2).url, holder3.lv3);
				break;
			}
			return coverView;
		}
		class ViewHolder1{
			TextView title;
			TextView media_name;
		}
		class ViewHolder2{
			TextView title2;
			TextView media_name2;
			ImageView middle_image;
		}
		class ViewHolder3{
			TextView title3;
			TextView media;
			ImageView lv1;
			ImageView lv2;
			ImageView lv3;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值