simpleAdapter图片实现过程

android 之simpleAdapter详解_第1张图片


示例代码:

后台逻辑:

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> 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 map=data.get(position);                    //String name=map.get("name").toString();                    //2.根据适配器对象获取数据                   // Map map= (Map) adapter.getItem(position);                    //String name=map.get("name").toString();                    //3.根据适配器控件获取数据                    //Map map= (Map)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 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> getData() {        data=new ArrayList<>();        for(int i=0;i<24;i++){            Map map=new HashMap<>();            map.put("header",R.drawable.png_01+i);            map.put("name","小丽"+i);            data.add(map);        }        return data;    }*/    /**     * 使用反射获取数据源     * @return     */    private List> 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 map=new HashMap<>();                //获取字段的值                Object fieldValue=field.get(null);                map.put("header",fieldValue);                map.put("name","小丽"+count++);                data.add(map);            }        }        return data;    }}
注意事项:这里要在res文件下添加一个自定义的xml文件。。。






更多相关文章

  1. 关于Android/java的复杂对象的深拷贝和浅拷贝
  2. android 使用Intent传递对象 Serializable 或者 Parcelabel 《第
  3. Android -- SharedPreferences保存基本数据、序列化对象、List数
  4. Android webview与js交换JSON对象数据示例
  5. Android中Intent传递对象的两种方法(Serializable,Parcelable)
  6. Android--用Pull解析器将对象解析成xml文件及单元测试
  7. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
  8. android 反射解析xml文件成为java对象

随机推荐

  1. android点滴4
  2. android OnGestureListener滑动事件详解
  3. Android(安卓)之 发送短信
  4. 新版本Android(安卓)Souce 编译问题
  5. 初识RatingBar
  6. android 技术
  7. Android组件的样式
  8. AndroidManifest.xml - 【 manifest -> p
  9. Android的“垃圾回收机制”---智能指针(an
  10. android 唤醒屏幕