• A12_ListView & ExpandablelistView


    一、ListView

    效果:

    1.activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        tools:context=".MainActivity" >
     
        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:drawSelectorOnTop="false"
            android:scrollbars="vertical" />
        <TextView 
            android:id="@android:id/empty"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="没有数据"/>
    
    </LinearLayout>

    该文件用于控制整个ListView框架的风格.


    2.usr.xml

    <?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="horizontal" >
    
        <ImageView 
            android:id="@+id/logo_imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/logo"
            android:scaleType="centerCrop"
            android:paddingTop="5dp"
            android:paddingLeft="10dp"
            />
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/ip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:paddingLeft="40dp"/>
        
    
    </LinearLayout>

    该文件用于控制,每一个ListView中的Item的样式。如通过后期需要添加一些装饰或者变化的话,都可以在这里面设置。比如增加,按钮、图片等等的设置。


    3.MainActivity.java

    package com.example.listview;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.widget.SimpleAdapter;
    
    public class MainActivity extends ListActivity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		//-----------------------封装数据-------------------------------
    		//ArrayList用于存储ListView的所有数据,每一个数据项用HashMap存储
    		ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    		
    		//HashMap中存储每一个Item的数据
    		HashMap<String, String> map1 = new HashMap<String, String>();
    		HashMap<String, String> map2 = new HashMap<String, String>();
    		HashMap<String, String> map3 = new HashMap<String, String>();
    
    		map1.put("name", "zhangsan");
    		map1.put("ip", "123");
    		map2.put("name", "zhangsan");
    		map2.put("ip", "123");
    		map3.put("name", "zhangsan");
    		map3.put("ip", "123");
    
    		list.add(map1);
    		list.add(map2);
    		list.add(map3);
    		//------------------------封装数据完成---------------------
    		//-------------------数据装入----------------------------
    		//参数的含义:
    		//1.上下文对象
    		//2.每一个item的数据来源
    		//3.每一个item所使用的布局文件
    		//4.每一个item数据源又哪几项
    		//5.每一项对应的控件的风格
    		SimpleAdapter simpleAdapter = new SimpleAdapter(this, list,
    				R.layout.usr, new String[] { "name", "ip" }, new int[] {
    						R.id.name, R.id.ip });
    		
    		//绑定item的数据和设置
    //		ListView listView =  (ListView) findViewById(R.id.listView);
    //		listView.setAdapter(simpleAdapter);
    		setListAdapter(simpleAdapter);
    	} 
    
    }

    该java代码只是,简单的实现了listView设置。其核心步骤就是这样。

    另外还有几点需要注意:

    1.当你的java代码继承的是ListActivity的时候,布局文件中Listvew的id需要使用系统定义好的id。(见activity_main.xml)

    方式有两种:

            android:id="@id/android:list"

            android:id"@android:id/list"

    注意一下,这时候你的java代码中没有使用findviewById绑定ListView控件。这是应为当你继承了ListActivity并将布局文件中的ListView的id设置为系统默认id后,系统会自动调用ListView控件。对ListView的所有操作,将由继承自ListActivity的方法实现。这时如果绑定适配就可以直使用setListAdapter方法。

    2.相对于第一种方式来说,第二种方式我们更加的熟悉。

        当你不希望使用系统默认id而是使用自己定义ListView的id的时候就需要采用这种方式。

        首先再第一种方式的基础上,要做如下的改动:

                第一,将ListView的id改为自己定义的id

                第二,java代码中不再继承ListActicity,改为继承Activity。

                第三,由于第二部的原因,你已经不能直接使用setListAdapter方法了。怎么办呢?你需要通过findViewById的方式找到Listview控件(很熟悉的设置吧)。比如,ListView mListView = findviewById(R.id.myListView)。然后使用mListView.setAdapter()方法来设置适配器。这样可以达到和方法一同样的效果。

    但是第二种方式也有不足之处:不能使系统自动调用控件。什么意思呢?

    如果,使用第一种方式。我在ListView空间下面加一个TextView,把TextView的控件id设为系统默认:android:id="@android:id/empty",那么当LIstView中没有数据的时候系统就会自动调用这个TextView控件显示这个TextView中设置好的文本。但是使用第二种方式就没有这么智能了,即使做了和刚才同样的设置当ListView中没有数据的时候系统也不会自动调用这个TextView

    这里有几篇帖子值得参考:点击打开链接 点击打开链接

    二、ExpandableListView

    效果:

    代码:

    1.main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    	android:orientation="vertical"
        tools:context=".Main" >
        
        <ExpandableListView 
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/darker_gray"
            android:drawSelectorOnTop="true"
            />
    
        <TextView
            android:id="@android:id/empty"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="没有数据!" />
    
    </LinearLayout>
    


    2.items.xml 一级条目的样式

    <?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" >
    
        <TextView
            android:id="@+id/item_TextView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingBottom="10dp"
            android:paddingLeft="30dp"
            android:paddingTop="10dp"
            android:text="没有数据"
            android:textSize="24sp" />
    
    </LinearLayout>

    3.sub_items.xml 二级条目的样式

    <?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="horizontal" >
    
        <ImageView
            android:id="@+id/logo_imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="10dp"
            android:paddingTop="5dp"
            android:scaleType="centerCrop"
            android:src="@drawable/logo" />
    
        <TextView
            android:id="@+id/sub_item_TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp"
            android:paddingLeft="40dp"
            android:paddingTop="10dp"
            android:text="没有数据" />
    
    </LinearLayout>

    4.main.java

    package com.example.expandablelistactivity;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    import android.app.ExpandableListActivity;
    import android.os.Bundle;
    import android.widget.SimpleExpandableListAdapter;
    
    public class Main extends ExpandableListActivity{
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    		/**
    		 * 有关数据的说明: 当一级条目有多个的的时候,需要使用容器把所有的以及条目整合到一起。
    		 */
    
    		// 创建数据容器存放一级条目----------------------------------
    		ArrayList<Map<String, String>> items = new ArrayList<Map<String, String>>();
    		// 创建两个一级条目
    		Map<String, String> item1 = new HashMap<String, String>();
    		Map<String, String> item2 = new HashMap<String, String>();
    		// 为一级条目添加数据
    		item1.put("items", "同學");
    		item2.put("items", "朋友");
    		// 绑定一级条目
    		items.add(item1);
    		items.add(item2);
    
    		
    		// 创建容器存放二级条目----------------------------------------
    		ArrayList<ArrayList<Map<String, String>>> subitems = new ArrayList<ArrayList<Map<String, String>>>();
    
    		// -------------第一个二级条目的内容
    		ArrayList<Map<String, String>> subitem1 = new ArrayList<Map<String, String>>();
    		Map<String, String> subitem1Date1 = new HashMap<String, String>();
    		Map<String, String> subitem1Date2 = new HashMap<String, String>();
    		subitem1Date1.put("subitems", "张飞");
    		subitem1Date2.put("subitems", "关羽");
    		subitem1.add(subitem1Date1);
    		subitem1.add(subitem1Date2);
    
    		// -------------第二个二级条目的内容
    		ArrayList<Map<String, String>> subitem2 = new ArrayList<Map<String, String>>();
    		Map<String, String> subitem2Date1 = new HashMap<String, String>();
    		Map<String, String> subitem2Date2 = new HashMap<String, String>();
    		subitem2Date1.put("subitems", "张龙");
    		subitem2Date2.put("subitems", "赵虎");
    		subitem2.add(subitem2Date1);
    		subitem2.add(subitem2Date2);
    		
    		
    		// 整合二级条目
    		subitems.add(subitem1);
    		subitems.add(subitem2);
    
    		// 为适配器绑定数据--------------------------
    		//参数:
    		//1.上下文对象
    		//2.第一级条目的数据源
    		//3.第一级条目的布局文件
    		//4.第一级条目的key,相当与HashMap的键值映射的“键”
    		//5.第一级条目显示控件的id,和第三个参数一一对应
    		//6.二级条目的数据源
    		//7.二级条目的布局文件
    		//8.二级条目的key
    		//9.二级条目显示控件的id,和第八个参数一一对应
    		SimpleExpandableListAdapter simpleExpandableListAdapter = new SimpleExpandableListAdapter(
    				this, items, R.layout.items, new String[] { "items" },
    				new int[] { R.id.item_TextView }, subitems, R.layout.sub_items,
    				new String[] { "subitems" },
    				new int[] { R.id.sub_item_TextView });
    		
    		//适配器绑定到ExpandableListActivity------------------------------------------------------
    		setListAdapter(simpleExpandableListAdapter);
    	}
    }
    



  • 相关阅读:
    勿忘初心
    欧拉函数与数论的结合UVA11426
    法雷级数
    欧拉函数及其应用
    poyla计数问题
    组合计数问题中容斥原理的应用
    数学问题当中的一些基本计数问题
    HDU4642博弈好题
    KMP算法在字符串中的应用
    UVA11722概率问题之线性规划
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3257877.html
Copyright © 2020-2023  润新知