程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 代碼-關於SimpleAdapter的幾點疑問

代碼-關於SimpleAdapter的幾點疑問

編輯:編程綜合問答
關於SimpleAdapter的幾點疑問

新手剛學安卓,今天看到GridView組件,用SimpleAdapter實現,但是代碼中有看不懂的地方

package org.crazyit.ui;

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.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;

/**

  • Description:

  • site: crazyit.org

  • Copyright (C), 2001-2014, Yeeku.H.Lee

  • This program is protected by copyright laws.

  • Program Name:

  • Date:
  • @author Yeeku.H.Lee [email protected]
  • @version 1.0
    */
    public class GridViewTest extends Activity
    {
    GridView grid;
    ImageView imageView;
    int[] imageIds = new int[]
    {
    R.drawable.bomb5 , R.drawable.bomb6 , R.drawable.bomb7
    , R.drawable.bomb8 , R.drawable.bomb9 , R.drawable.bomb10
    , R.drawable.bomb11 , R.drawable.bomb12 , R.drawable.bomb13
    , R.drawable.bomb14 , R.drawable.bomb15 , R.drawable.bomb16
    };
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // 創建一個List對象,List對象的元素是Map
    List> listItems =
    new ArrayList>();
    for (int i = 0; i < imageIds.length; i++)
    {
    Map listItem = new HashMap();
    listItem.put("image", imageIds[i]);
    listItems.add(listItem);
    }
    // 獲取顯示圖片的ImageView
    imageView = (ImageView) findViewById(R.id.imageView);
    // 創建一個SimpleAdapter
    SimpleAdapter simpleAdapter = new SimpleAdapter(this,
    listItems
    // 使用/layout/cell.xml文件作為界面布局
    , R.layout.cell, new String[] { "image" },
    new int[] { R.id.image1 });
    grid = (GridView) findViewById(R.id.grid01);
    // 為GridView設置Adapter
    grid.setAdapter(simpleAdapter);
    // 添加列表項被選中的監聽器
    grid.setOnItemSelectedListener(new OnItemSelectedListener()
    {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view,
    int position, long id)
    {
    // 顯示當前被選中的圖片
    imageView.setImageResource(imageIds[position]);
    }

        @Override
        public void onNothingSelected(AdapterView<?> parent)
        {
        }
    });
    // 添加列表項被單擊的監聽器
    grid.setOnItemClickListener(new OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id)
        {
            // 顯示被單擊的圖片的圖片
            imageView.setImageResource(imageIds[position]);
        }
    });
    

    }
    }


第一點 ,Map接口中的Key不是唯一的麼,為什麼在循環中key都是image
代碼如下

 for (int i = 0; i < imageIds.length; i++)
        {
            Map<String, Object> listItem = new HashMap<String, Object>();
            listItem.put("image", imageIds[i]);
            listItems.add(listItem);
        }

第二點,對於simpleAdapter中第三個參數也就是哪個布局,這個cell布局裡面只有一個imageView,但是主布局裡面已經有了一個imageView啊,意義何在,下面上圖

圖片說明

主布局文件如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    >
<!-- 定義一個GridView組件 -->

    <GridView
        android:id="@+id/grid01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:horizontalSpacing="1pt"
        android:numColumns="4"
        android:verticalSpacing="1pt" >
    </GridView>

<!-- 定義一個ImageView組件 -->
<ImageView android:id="@+id/imageView"
    android:layout_width="240dp"
    android:layout_height="240dp"
    android:layout_gravity="center_horizontal"
    />  
</LinearLayout>

最佳回答:


 第一點 ,Map接口中的Key不是唯一的麼,為什麼在循環中key都是image
代碼如下
 for (int i = 0; i < imageIds.length; i++)
        {
            Map<String, Object> listItem = new HashMap<String, Object>();  //這裡不是new了map了,每次循環都重新new的map,所以key是唯一的,image是對應你上面的

                        SimpleAdapter simpleAdapter = new SimpleAdapter(this,
listItems
// 使用/layout/cell.xml文件作為界面布局
, R.layout.cell, new String[] { "image" },    //這個image和下面put的key值對應
new int[] { R.id.image1 });

            listItem.put("image", imageIds[i]);
            listItems.add(listItem);
        }

第二點,對於simpleAdapter中第三個參數也就是哪個布局,這個cell布局裡面只有一個imageView,但是主布局裡面已經有了一個imageView啊,意義何在
 R.layout.cell這個布局時gridview的item布局,和主布局沒關系。主布局是主布局,item布局是item布局,你上面顯示的多個小圖片都是item布局生成的。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved