• Android开发具体解释之ListView具体解释一


    列表ListView介绍和实例


     1.ListView  -- ListActivity -- ListAdapter
     2.ArrayAdapter结合ListView进行显示
     3.SimpleAdapter结合ListView进行显示
     4.处理单击ListView事件,处理选择ListView的事件
     5.使用SimpleCursorAdapter与ListView进行关联

     ListView :

    要让一个ListView显示出来须要的3个条件:

    1.ListView  --- 须要被显示的列表
    2.Data      --- 和ListView绑定的数据,通常是一个Cursor或字符串数组
    3.ListAdapter --- data和ListView的桥梁  --- 适配作用


    经常使用ListAdapter子类:


    ArrayAdapter     ---  数组适配  ---- ListAdapter的直接子类


      ArrayList<类型>(context,int itemLayout, data)
      context:上下文环境
      itemLayout:自己定义的每一项要显示的Layout
      data:要显示的数据
     样例:
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
       android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中经常自己定义此item布局


      特别注意:itemLayout  --- ListView中每一项(行)的布局  ---  能够引用系统自带的,但 实际项目中很多其它是使用自己定义的item布局


      系统自带的经常使用item布局:
      android.R.layout.simple_list_item_1    ----- 每一项仅仅有一个TextView
      android.R.layout.simple_list_item_1    ----- 每一项仅仅有两个TextView
      android.R.layout.simple_list_item_single_choice   ----- 每一项有一个TextView。但这一项能够被选择


    SimpleAdapter    ---  简单适配  ---- ListAdapter的直接子类
     
     通过SimpleAdapter能够让ListView其中的每一项内容更加个性化,
     通常将ListView中某项的布局信息写在XML文件里。这个布局文件通过R.layout.XX -- 引入到ListView中
     
     SimpleAdapter是ArrayList和Listview之间的桥梁  
     ArrayList中的每一项都是一个Map<String,?>类型。

    ArrayList其中的每一项Map对象都和ListView其中的一项进行数据绑定和一一相应


    SimpleAdapter的构造器:
    public SimpleAdapterK(Context context, List<? extends Map<String,?

    >> data, int resource, String[] from , int[] to)


    context  -- 上下文
    data     -- 基于Map的List,Data里面的每一项都和ListIView里的每一项相应。Data里面的每一项都是Map类型。
                这个Map类中包括了ListView每一行须要的数据  --- 经常使用  data = new ArrayList<Map<String,Object>>();
    resource -- 一个layout, 必须包括在to中出现的那些View,系统提供或自己定义layout布局都可。
                系统提供的有:android.R.layout.simpe_list_item_single_choice
                     android.R.layout.two_line_list_item
    from     -- 数组名,每个名字是为了在ArrayList中的每个item中索引Map<String, Object>的Object用的
    to       -- 这里面是一个TextView的数组。这些TextView以id形式表示。这鞋View必须是TextView


     
    为ListView中的每一项加入事件处理:    OnItemClickListener 
     
    OnItemClickListener listener = new OnItemClickListener() {


    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
    setTitle(parent.getItemAtPosition(position).toString());
    }
    };

    listView.setOnItemClickListener(listener);


    说明:
    onItemClick  --  回调函数。当用户单击ListView每一项时。自己主动运行
        parent     --- 被单击的ListView
        view       --- 用户操作的那一项
        position   --- 操作的item项在ListView中的位置
        id         --- 被选中的那一行的id


    getItemAtPosition(position)  --- 通过position获得和这一行绑定的数据, 本例中仅仅是把改行内容作为title写出来

    listView.setOnItemClickListener(listener)   --- 将监听器注冊到ListView中


    实例代码:

    ArrayAdapter与ListView


    package com.example.androidbasicdemo1;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    /**
     * ArrayList<类型>(context,int itemLayout, data)
     * context:上下文环境
     * itemLayout:自己定义的每一项要显示的Layout
     * data:要显示的数据
     * 
     * 样例:
     * ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
       android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中经常自己定义此item布局
    
     * @author JayHe
     *
     */
    public class ArrayAdapterListViewActivity extends Activity {
    
    	private ListView listView;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_array_adapter_list_view);
    
    		//从xml布局文件里获得ListView对象
    		listView = (ListView) findViewById(R.id.arrayadapterlistView1);
    		
    		//定义要显示的数据
    		String[] data = getResources().getStringArray(R.array.items_country);
    		//定义适配器
    		ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
    		
    		//为ListView加入适配器
    		listView.setAdapter(adapter);
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		getMenuInflater().inflate(R.menu.array_adapter_list_view, menu);
    		return true;
    	}
    
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		int id = item.getItemId();
    		if (id == R.id.action_settings) {
    			return true;
    		}
    		return super.onOptionsItemSelected(item);
    	}
    
    
    }
    



    SimpleAdapter与ListView


    package com.example.androidbasicdemo1;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    
    public class SimpleAdapterListViewActivity extends Activity {
    
    	private List<Map<String, Object>> data;
    	
    	private ListView listView;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_simple_adapter_list_view);
    		
    		
    		listView = (ListView) findViewById(R.id.simpleadapterlistView1);
    		
    		SimpleAdapter adapter = new SimpleAdapter(SimpleAdapterListViewActivity.this, prepareData(), R.layout.slef_list_item1,new String[]{"姓名","性别"}, new int[]{R.id.selflistview1textView1,R.id.selflistview1textView2});
    		
    		listView.setAdapter(adapter);
    	
    		
    		OnItemClickListener listener = new OnItemClickListener() {
    
    			@Override
    			public void onItemClick(AdapterView<?> parent, View view, int position,
    					long id) {
    				setTitle(parent.getItemAtPosition(position).toString());
    			}
    		};
    		
    		listView.setOnItemClickListener(listener);
    
    	}
    
    	
    	private List<Map<String, Object>> prepareData(){
    		data = new ArrayList<Map<String, Object>>();
    		Map<String, Object> item;
    		item = new HashMap<String, Object>();
    		item.put("姓名", "吴欢小盆友");
    		item.put("性别", "女");
    		data.add(item);
    		item = new HashMap<String, Object>();
    		item.put("姓名", "冯荣小朋友");
    		item.put("性别", "女");
    		data.add(item);
    		item = new HashMap<String, Object>();
    		item.put("姓名", "夏明");
    		item.put("性别", "男");
    		data.add(item);
    		item = new HashMap<String, Object>();
    		item.put("姓名", "小华");
    		item.put("性别", "男");
    		data.add(item);
    		return data;
    	}
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		getMenuInflater().inflate(R.menu.simple_adapter_list_view, menu);
    		return true;
    	}
    
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		int id = item.getItemId();
    		if (id == R.id.action_settings) {
    			return true;
    		}
    		return super.onOptionsItemSelected(item);
    	}
    
    
    }
    


  • 相关阅读:
    css知识小结(更新中)
    vim的简易操作
    shell语言学习(更新中)
    An Introduction to C & GUI Programming -----Simon Long 学习笔记 1
    fread,fwrite(二)
    fread,fwrite(一)
    printf 打印颜色
    容斥原理及证明
    字典的认识和使用 day05
    列表和元祖的使用 day 04
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5318322.html
Copyright © 2020-2023  润新知