Android自定义ListView

自定义ListView的好处:

Android的ListView给我们提供了几个已经定义的adapter例如SimpleAdapter、ArrayAdapter等,但是这个是他们定义好的,只能添加规定的内容,要是想只在Listview中添加个文字或者图片用而想要在Listview中添加自己想要的效果或者数据就需要自定义Listview了

 

 

使用ListView控件+BaseAdapter实现如下图所示的功能。

要求:ListView中文字的长度小于等于3,图标显示为为“猫”,文字长度在3到5之间的,图标显示为“小狗”,其它情况下图标显示为“小鸭子”。(要优化ListView控件的性能)

 

先看一下效果图

可以动态向自定义的ListView中添加文字;

 

先给出主界面代码:

 

package com.example.mylistview;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

/**
 * @author Bri
 * 
 * @version 2015-10-27 17:28
 */
public class MainActivity extends Activity {
	private ListView lv;
	List<String> list = new ArrayList<String>();
	EditText et_addContent;
	private Button bt;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 默认添加数据
		list.add("1");
		list.add("12");
		list.add("zml2015");
		list.add("1234");
		list.add("12345");
		list.add("123456");
		et_addContent = (EditText) findViewById(R.id.et_addContent);
		bt = (Button) findViewById(R.id.bt_addContent);
		bt.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				String addContent = et_addContent.getText().toString().trim();
				if (addContent.equals(""))
					Toast.makeText(MainActivity.this, "请输入有效内容",
							Toast.LENGTH_SHORT).show();
				else {
					list.add(addContent);
					Toast.makeText(MainActivity.this, "添加成功",
							Toast.LENGTH_SHORT).show();
					et_addContent.setText("");
				}
			}
		});
		lv = (ListView) findViewById(R.id.lv);
		lv.setAdapter(new MyListViewAdapter(list, R.layout.lv_item,
				MainActivity.this));

	}

}


自定义的ListView的适配器:

 

 

package com.example.mylistview;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;

/**
 * @author Bri
 *@param data 用于动态添加字符的list数据集
 *@param context 上下文
 *@param layout 添加在listview中的布局
 */
public class MyListViewAdapter extends BaseAdapter implements ListAdapter {
	private List<String> data;
	private int layout;
	private Context context;
	private ImageView iv = null;
	private TextView tv = null;

	public MyListViewAdapter(List<String> data, int layout, Context context) {
		this.data = data;
		this.layout = layout;
		this.context = context;

	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return data.size();
	}

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

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

	@Override
	public View getView(int arg0, View view, ViewGroup arg2) {
		if (view == null) {
			view = LayoutInflater.from(context).inflate(layout, null);
			iv = (ImageView) view.findViewById(R.id.iv);
			tv = (TextView) view.findViewById(R.id.tv);

			view.setTag(new ObjectClass(iv, tv));

		} else {
			ObjectClass objectclass = (ObjectClass) view.getTag();
			iv = objectclass.iv;
			tv = objectclass.text;

		}
		if (data.get(arg0).length() <= 3)
			iv.setImageResource(R.drawable.p_1);
		else if (data.get(arg0).length() <= 5)
			iv.setImageResource(R.drawable.p_2);
		else if (data.get(arg0).length() > 5)
			iv.setImageResource(R.drawable.p_3);
		tv.setText(data.get(arg0));
		return view;
	}
//用于临时保存TextView和ImageView控件的信息,不然的话会报空指针异常,
//<span style="font-family: Arial, Helvetica, sans-serif;">当然了有人自定义ViewHolder目的是一样</span>的
	private final class ObjectClass {

		ImageView iv = null;
		TextView text = null;

		public ObjectClass(ImageView iv, TextView text) {
			this.iv = iv;
			this.text = text;
		}
	}

}


布局文件及其他详细代码可以去这里下载点击打开链接

 

 

 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值