android 之simpleAdapter详解


simpleAdapter图片实现过程


示例代码:

后台逻辑:

package com.hsj.example.advcontroldemo01;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {


    private Gallery gallery;

    /**
     * 声明简单适配器对象
     */
    private SimpleAdapter adapter;

    /**
     * 声明数据源对象
     */
    private List<Map<String,Object>> data;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.gallery= (Gallery) this.findViewById(R.id.gallery);


        try {
            this.adapter=this.getAdapter();
            this.gallery.setAdapter(adapter);


            //注册当条目被选中时对应的监听器对象
            this.gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                /**
                 * 当条目被选中时自动调用的方法
                 * @param parent
                 * @param view
                 * @param position
                 * @param id
                 */
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    //1.根据数据源获取
                    //Map<String,Object> map=data.get(position);
                    //String name=map.get("name").toString();

                    //2.根据适配器对象获取数据
                   // Map<String,Object> map= (Map<String, Object>) adapter.getItem(position);
                    //String name=map.get("name").toString();

                    //3.根据适配器控件获取数据
                    //Map<String,Object> map= (Map<String, Object>)parent.getItemAtPosition(position);
                    //String name=map.get("name").toString();


                    System.out.println("==onItemSelected(AdapterView<?> parent="+parent+", View view="+view+", int position="+position+", long id="+id+")==");
                    //4.根据用户点击的条目获取数据
                    TextView textView_name= (TextView) view.findViewById(R.id.textView_name);
                    String name=textView_name.getText().toString();

                    Toast.makeText(getApplicationContext(),"name="+name, Toast.LENGTH_LONG).show();
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }
            });


            this.gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Map<String,Object> map=data.get(position);
                    String name=map.get("name").toString();
                    Toast.makeText(getApplicationContext(),"name="+name, Toast.LENGTH_LONG).show();
                }
            });

        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }


    }

    /**
     * 返回适配器对象
     * @return
     */
    private SimpleAdapter getAdapter() throws IllegalAccessException {
        data=getData();
        adapter=new SimpleAdapter(
                this,//上下文对象
                data,//数据源
                R.layout.gallery_item,//gallery 控件每一个条目对象对应的布局文件的id值
                new String[]{"header","name"},//数据源中Map的键值组成的字符串数组
                new int[]{R.id.imageView_header,R.id.textView_name} //gallery 控件每一个条目对象中控件的id值组成的int数组

        );
        return adapter;
    }

    /**
     * 返回数据源对象
     * @return
     */
    /*private List<Map<String, Object>> getData() {
        data=new ArrayList<>();
        for(int i=0;i<24;i++){
            Map<String,Object> map=new HashMap<>();
            map.put("header",R.drawable.png_01+i);
            map.put("name","小丽"+i);
            data.add(map);
        }
        return data;
    }*/


    /**
     * 使用反射获取数据源
     * @return
     */
    private List<Map<String, Object>> getData() throws IllegalAccessException {
        data=new ArrayList<>();

        /*
        获取类模板Class对象的方式有哪些?
        A:Class clz=对象名.getClass()
        B:Class clz=类名.class
        C:Class clz=Class.forName("类名字符串")
         */

        //获取类模板对象
        Class clz=R.drawable.class;

        //获取R.drawale 类中所有的字段对象
        //clz.getFields();//获取本类及其父类中所有使用public修饰的字段对象
         Field[] fields=clz.getDeclaredFields();//获取本类中所有字段,不管访问修饰符是什么,但不包括父类中的字段

        //System.out.println(fields.length);

        int count=0;
        int len=fields.length;
        for(int i=0;i<len;i++){
            //根据索引值获取指定字段对象
            Field field=fields[i];
            //获取字段的名字
            String name=field.getName();
            //获取以png开头的字段对象:name.startsWith("png")如果name 以png开头则返回true,否则返回false
            if(name.startsWith("png")){
                Map<String,Object> map=new HashMap<>();
                //获取字段的值
                Object fieldValue=field.get(null);
                map.put("header",fieldValue);
                map.put("name","小丽"+count++);
                data.add(map);
            }

        }
        return data;
    }


}
注意事项:这里要在res文件下添加一个自定义的xml文件。。。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值