Android学习笔记之ListView

5 篇文章 0 订阅

ListView是androidn中的一个非常重要的组件,基本上在每一个软件中都会用到 。下面谈谈关于我对ListView的理解

1通过资源文件实现简单的ListView显示 ,在res/values/strings中添加如下代码:

<string-array name="citys">
        <item>北京</item>
        <item>成都</item>
        <item>汉中</item>
        <item>重庆</item>
    </string-array>

然后在activity_mian.xml文件中添加如下代码

<ListView 
      android:id="@+id/listView01"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:entries="@array/citys"/>

添加事件处理方法 实现android.widget.AdapterView.OnItemClickListener 下的接口 添加实现方法

@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		//通过输出可以得知View 为TextView
		//System.out.println(view.getClass());
		TextView tv=(TextView)view;
		Toast.makeText(this, tv.getText(), Toast.LENGTH_SHORT).show();
	}

通过继承ListActivity来实现,注意不需要设置setContentVeiw了因为在ListActivity中自己已经实现了还有上面的事件处理方法ListView已经做了空实现只需从写

onListItemClick方法就行了

public class MainActivity3 extends ListActivity{
   @Override
 protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	String[] names={"张三","李四","王五","赵六"};
	Map<String,Object>map=null;
	List<Map<String,Object>> data =new ArrayList<Map<String,Object>>();
	//录入数据
	for(int i=0;i<names.length;i++){
		map=new HashMap<String, Object>();
		map.put("name", names[i]);
		map.put("image", R.drawable.myimage3);
		data.add(map);
	}
	SimpleAdapter adapter=new SimpleAdapter(this, data,R.layout.main2_item,
			new String[]{"name","image"}, new int[]{R.id.textView1,R.id.imageView1});
	getListView().setAdapter(adapter);
 }
   @Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		// TODO Auto-generated method stub
		super.onListItemClick(l, v, position, id);
	}
}


2 自定义ListVeiw 方式(图片+文本框)

  (1) 通过SimplerAaapter实现:

     1 ) 新建布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

 2 )在MainActivity中重写如下代码

@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listView=(ListView)findViewById(R.id.listView01);
		String[] names={"张三","李四","王五","赵六"};
		Map<String,Object>map= null;new HashMap<String, Object>();
		List<Map<String,Object>> data =new ArrayList<Map<String,Object>>();
		//录入数据
		for(int i=0;i<names.length;i++){
			map=new HashMap<String, Object>();
			map.put("name", names[i]);
			map.put("image", R.drawable.myimage3);
			data.add(map);
		}
		//System.out.println("***************");
		//System.out.println(data);
		/*SimpleAdapte 的参数如下
		 * 1 上下文
		 * 2 一个List<Map<?,?>>一个装着Map的List
		 * 3布局(ListView显示方式)
		 * 4一个字符串数组与Map中的key对应
		 * 5一个整形数组与Map中的Valeu对应
		 * */
		SimpleAdapter adapter=new SimpleAdapter(this, data, R.layout.main2_item, 
			new String[]{"name","image"}, new int[]{R.id.textView1,R.id.imageView1});
		listView.setAdapter(adapter);
	}
效果如下(这里我自己的图片没有处理好)



(2)用SimpleAdapter我们可以自定义我们喜欢的风格,但是simpleAdapter却不能进行一些相关的处理操作为此

我们需要自己来写我们自己的Adapter,因为这个Adapter我们只想我们自己去使用所以用内部类来实现

1)首先新建整体布局ListView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/main4_listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </ListView>

</LinearLayout>
2)新建自定义的ListView每一行的布局(图片+文本)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:gravity="center">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

java代码

public class MainActivity4 extends Activity {
	private ListView listView = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main4);
		listView = (ListView) findViewById(R.id.main4_listView);
		MyAdapter adapter = new MyAdapter();
		listView.setAdapter(adapter);

	}

	String[] names = { "张三", "李四", "王五", "赵六" };

	class MyAdapter extends BaseAdapter {
		@Override
		public int getCount() {
			return names.length;
		}

		@Override
		public Object getItem(int position) {
			return names[position];
		}

		@Override
		public long getItemId(int position) {
			return position;
		}
		int i = 1;
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if (convertView == null) {
				holder = new ViewHolder();
				// 获取资源文件布局
				convertView = getLayoutInflater().inflate(R.layout.main4_item,null);
				//查找相应的组件
				holder.textView = (TextView) convertView.findViewById(R.id.textView1);
				holder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			
			if (i % 2 == 0) {
				holder.imageView.setImageResource(R.drawable.myimage3);
			} else {
				holder.imageView.setImageResource(R.drawable.ic_launcher);
			}
			holder.textView.setText(names[position]);
			i++;
			return convertView;
		}

	}

	static class ViewHolder {
		ImageView imageView;
		TextView textView;
	}
}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值