zoukankan      html  css  js  c++  java
  • android学习--视图列表(ListView和ListActivity)

     说明:

         视图列表(ListView和ListActivity)与AutoComplete、Spinner类似,它们都须要一个供显示的列表项,能够须要借助于内容Adapter提供显示列表项

         创建ListView有两种方式:

            (1)直接使用ListView进行创建

            (2)Activity继承ListActivity


         ListView的经常使用XML属性

     


    以下分别用两种方式创建ListView

     方式一:直接使用ListView进行创建

    (1)   main_activity.xml

    以下布局两个listView,一个基于数组,一个基于Adapter            

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearlayout"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        
        <ListView 
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:entries="@array/language"
           />
        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="30dp"/>
        <ListView
            android:id="@+id/listView2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:headerDividersEnabled="true"
            android:footerDividersEnabled="true"
            android:divider="@drawable/img02"/>
       
    </LinearLayout>
    

    (2) strings.xml     存放listView1内容数组

    <?xml version="1.0" encoding="utf-8"?

    > <resources> <string name="app_name">ListView</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string-array name="language"> <item>汉语</item> <item>韩语</item> <item>英语</item> <item>日语</item> <item>葡语</item> <item>俄语</item> </string-array> </resources>




    (3) MainActivity.java

    步骤:

        1、获取布局ListView

         2、封装显示内容list或数组

         3、构建适配器Adapter

         4、给ListView加入适配器

    package com.example.listview;
    
    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.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class MainActivity extends Activity {
    	
    	private ListView listView2 = null;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		//获取ListView
    		listView2 = (ListView) findViewById(R.id.listView2);
    		//定义数组
    		String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};
    		//声明适配器
                    //this  上下文
                    //android.R.layout.simple_list_item_checked 列表样式
                    //arr  显示内容 (数组或list集合)
                    ArrayAdapter<String >  arrayAdapter = new ArrayAdapter<String>(this, 
    				android.R.layout.simple_list_item_checked, arr);
    		//listView加入适配器
    		listView2.setAdapter(arrayAdapter);
    		listView2.setOnItemClickListener(new OnItemClickListener() {
    
    			@Override
    			public void onItemClick(AdapterView<?> parent, View view,
    					int position, long id) {
    				Log.i("listView", parent.getItemAtPosition(position).toString());
    				
    			}
    		});
    		
    	}
    }
    

    执行效果例如以下:




    假设想要自己定义列表,列表项显示多个组件。我们能够用SimpleAdapter来自己定义我们的列表。

    (1)   main_activity.xml

    布局了ImageView,TextView 组件,用于显示列表内容

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearlayout"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
         <ListView
            android:id="@+id/listView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            />
       
        <LinearLayout 
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <ImageView 
    	        android:id="@+id/img"
    	        android:layout_width="50dp"
    	        android:layout_height="65dp"/>
    	    <TextView 
    	        android:id="@+id/name"
    	        android:layout_width="wrap_content"
    	        android:layout_height="wrap_content"
    	        android:layout_marginLeft="100dp"
    	        android:layout_marginTop="30dp"
    	       />
    	     <TextView 
    	        android:id="@+id/phone"
    	        android:layout_width="wrap_content"
    	        android:layout_height="wrap_content"
    	        android:layout_marginTop="30dp"
    	        android:layout_marginLeft="150dp"
    	     />
         </LinearLayout>
    </LinearLayout>
    

    (2)MainActivity.java    步骤与上面的一样

    package com.example.listviews;
    
    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.widget.ListView;
    import android.widget.SimpleAdapter;
    
    public class MainActivity extends Activity {
    	
    	private ListView listView = null; //定义ListView组件
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		//获取listView组件
    		listView = (ListView) findViewById(R.id.listView);
    		//初始化基础数据
    		String name[] = new String[]{"张三","李四","王五","张飞"};
    		String phone[] = new String[]{"14313426573","15908263541","18012345678","13423456789"};
    		int img [] = new int[]{R.drawable.name01,R.drawable.name02,R.drawable.name03,R.drawable.name04};
    		//封装list集合数据
    		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    		for(int i=0;i<name.length;i++){
    			Map<String,Object> listItem = new HashMap<String, Object>();
    			listItem.put("img", img[i]);
    			listItem.put("name", name[i]);
    			listItem.put("phone", phone[i]);
    			list.add(listItem);
    		}
    		//配置SimpleAdapter适配器
    		//this  上下文
    		//R.layout.activity_main   布局文件
    		//new String[]{"img","name","phone"}    列表内容key
    		//new int[]{R.id.img,R.id.name,R.id.phone}  用于显示内容的布局组件
    		SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.activity_main,
    				new String[]{"img","name","phone"}, new int[]{R.id.img,R.id.name,R.id.phone});
    		//加入适配器
    		listView.setAdapter(simpleAdapter);
    	}
    
    }
    

    执行效果例如以下:



       除了SimpleAdapter之外,我们还能够重写BaseAdapter的getView方法作为列表的列表项 。 有兴趣的同学能够动手写写BaseAdapter




    方式二:Activity继承ListActivity


    注意:

     ListActivity的默认布局由一个位于屏幕中心的全屏列表构成。假设你不想使用默认的布局,能够在onCreate()方法中通过setContentView()方法设定你自己的布局。假设指定你自己定制的布局,你的布局中必须包括一个id"@id/android:list"的ListView。 若你还指定了一个id"@id/android:empty"的view。当ListView中没有数据要显示时,这个view就会被显示,同一时候ListView会被隐藏


    (1)main_activity.xml

    布局了一个ListView和TextView,TextView的id为@id/android:empty,当ListView中没有数据要显示时,这个TextView就会被显示

    <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ListView 
            android:id="@+id/android:list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <TextView android:id="@android:id/empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FF0000"
            android:text="No data"/>
        
    </LinearLayout>

    (2) MainActivity.java

    package com.example.listactivity;
    
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class MainActivity extends ListActivity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};
    		//设置适配器
    		ArrayAdapter<String >  arrayAdapter = new ArrayAdapter<String>(this, 
    				android.R.layout.simple_list_item_checked, arr);
    		//给ListActivity加入适配器
    		setListAdapter(arrayAdapter);
    	}
    
    	
    
    }
    



    假设ListView没有内容,则显示TextView。

    例如以下





         方式一和方式二的效果全然一样,不同的是。一个给ListView组件加入适配器。一个给ListActivity类加入适配器而已。

  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5117826.html
Copyright © 2011-2022 走看看