zoukankan      html  css  js  c++  java
  • AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表

    代码请见SimpleAdapterDemo.zip。

    步骤如下:

    1、创建主布局文件

    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
       
        <ListView 
            android:id="@+id/listview"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:divider="#00ff00"
            android:dividerHeight="2dp"
            android:headerDividersEnabled="false"
             />
    
    </RelativeLayout>
    
    2、创建每个列表选项的视图

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ll_listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <ImageView 
            android:id="@+id/iv_header"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:contentDescription="@string/header"/>
    
        <LinearLayout
            android:id="@+id/ll_title_content"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:orientation="vertical" 
            android:layout_weight="4">
    
            <TextView
                android:id="@+id/title"
                android:layout_width="match_parent"
                android:layout_height="20dp"
                android:background="#000000" />
    
            <TextView
                android:id="@+id/content"
                android:layout_width="match_parent"
                android:layout_height="20dp"
                android:background="#00ff00" />
        </LinearLayout>
    
    </LinearLayout>

    3、创建主类

    package com.ljh.listviewdemo;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    import android.app.Activity;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		// (1)创建要显示的文本内容
    		String[] arr = { "header", "title", "content" };
    		// (2)与使用ListActivity的最大区别:使用findViewById得到一个ListView
    		ListView lv = (ListView) findViewById(R.id.listview);
    
    		// (3)创建ArrayAdapter,其中第二个参数resource:The resource ID for a layout file
    		// containing a TextView to use when instantiating views.是要以一个layout作为
    		// 参数,且此layout需要包含textview。
    		/*
    		 * ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    		 * R.layout.list, arr);
    		 */
    
    		String[] titles = { "title1", "title2", "title3", "title4" };
    		String[] contents = { "content1", "content2", "content3", "content4" };
    		int[] headers = { R.drawable.p1, R.drawable.p2, R.drawable.p3,
    				R.drawable.p4 };
    		List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
    
    		/*
    		 * Parameters: 
    		 * context The context where the View associated with this
    		 * SimpleAdapter is running data A List of Maps. Each entry in the List
    		 * corresponds to one row in the list. The Maps contain the data for
    		 * each row, and should include all the entries specified in "from"
    		 * resource Resource identifier of a view layout that defines the views
    		 * for this list item. The layout file should include at least those
    		 * named views defined in "to" from A list of column names that will be
    		 * added to the Map associated with each item. to The views that should
    		 * display column in the "from" parameter. These should all be
    		 * TextViews. The first N views in this list are given the values of the
    		 * first N columns in the from parameter.
    		 */SimpleAdapter adapter = new SimpleAdapter(this, datas,
    				R.layout.list, arr, new int[] { R.id.iv_header, R.id.title,
    						R.id.content });
    		for (int i = 0; i < titles.length; i++) {
    			Map<String, Object> map = new HashMap<String, Object>();
    			map.put("title", titles[i]);
    			map.put("content", contents[i]);
    			map.put("header", headers[i]);
    			datas.add(map);
    		}
    		// (4)为ListActivity设置adapter.
    		lv.setAdapter(adapter);
    
    		lv.setOnItemClickListener(new OnItemClickListener() {
    
    			// 定义当某个选项被点击时的操作。
    			@Override
    			public void onItemClick(AdapterView<?> parent, View view,
    					int position, long id) {
    				Toast.makeText(MainActivity.this,
    						position + " item is clicked.", Toast.LENGTH_LONG)
    						.show();
    
    			}
    
    		});
    
    	}
    
    }
    



    1、使用SimpleAdapter与ArrayAdapter相比,它可以支持复杂的表项结构,而不只是单一的textview。

    2、其创建过程的两个主要区别是:

    (1)每个列表项的布局文件不一样

    (2)创建SimpleAdapter的操作更为复杂,需要构建一个List<Map<String, Object>>。




  • 相关阅读:
    MAXSCRIPT 连数据库(转)
    Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
    ArrayList知识点
    HashMap知识点
    使用docker 安装nacos
    记录docker 安装sonarqube和安装的一些坑
    sql优化
    Centos7下安装Docker
    使用docker安装gitlab
    docker安装jenkins
  • 原文地址:https://www.cnblogs.com/jediael/p/4304164.html
Copyright © 2011-2022 走看看