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类加入适配器而已。

  • 相关阅读:
    PHP 类的继承问题
    爬虫第一章
    如何给CBV添加装饰器
    结巴分词 gensim系数矩阵相似度 pypinyin
    elasticsearch 第二章 elasticsearch的详细用法及参数
    运维自动化 第五章 playbook 模块补充
    运维自动化 第四章 模块
    运维自动化 第三章 ansible
    正则补充
    运维自动化 第二章 openpyxl的用法,读写excel内容
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5117826.html
Copyright © 2011-2022 走看看