adapter(适配器)

原创 2016年06月01日 22:26:04
    关键字  ListView ArrayAdapter , SimpleAdapter,自定义适配器
    当我们做界面的时候,想要界面跑起来,同时但我们点击的时候,机器做出回应,这时候我们
    首先就要用到
    ListView 实现界面一条一条的排列,当界面满格时可以向下滑动,但是每条界面没有信息,当
    我们想要有信息时就要用到adapter(适配器),他是数据源与ListView之间建立桥梁,是实现可编辑的信息自由显示,类似于View控件,
    但是可以对每一条编辑页面的快速生成,避免了每一条信息的都需要重复编辑
    首先是ArrayAdapter
    ArrayAdapter的实现需要1.上下文(context) 2.一条TextView.xml文档,里面不能放任何其他控件 3.一维数组
    public class List_Array_Activity extends AppCompatActivity {

    public ListView mListView;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list__array_layout);//本类的activity_list__array_layout.xml 里面需要定义一个ListView控件

        mListView= (ListView) findViewById(R.id.ListView_first_view);//定义id好找
        
        String[] array = new String[]{"java","j2se","android","ui","css","structs","javascript","html","xml"};//一维数组的每一个对象都是依次显示的对象
        ArrayAdapter arrayadapter = new ArrayAdapter(this,R.layout.activity_demo__text_view_layout,array);
        //this指代context上下文,activity_demo__text_view_layout是TextView.xml文档,array是数组

        mListView.setAdapter(arrayadapter);//注册启动
    }
}
  SimpleAdapter是实现可编辑页面的适配器
  关键字 1.context应用上下文 2.编辑页面的xml文档 3.HashMap的键值对的键 4.自定义的界面xml文档里相应的编码
  public class Simple_Adapter_Activity extends AppCompatActivity implements AdapterView.OnItemClickListener{//点击是实现事件回应

    public ListView mListView;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple__adapter_layout);
        mListView= (ListView) findViewById(R.id.ListView_Simple);

       ArrayList arrayList =listData();

       String[] from = {"icon","title","content"};//HashMap的键值对的键,用来标记不同的事件
       
       int[] to  = {R.id.simple_demo_imageview,R.id.simple_demo_textviewtitle,R.id.simple_demo_textviewcontent};
       //to 里面的每一id值都是自定义的界面xml文档里相应的编码
       SimpleAdapter simpleAdapter = new SimpleAdapter(this,arrayList,R.layout.activity_demo__simple_layout,from,to);
        

       mListView.setAdapter(simpleAdapter);
      
        mListView.setOnItemClickListener(this);//注册注册注册
    }
    public ArrayList listData(){
        ArrayList arrayList = new ArrayList();
        HashMap<String,Object> item = new HashMap<>();
        item.put("icon",R.drawable.liying6);//"icon"HashMap的键值对的键 R.drawable.liying6是具体的值
        item.put("title","赵丽颖");
        item.put("content","资料");
        arrayList.add(item);

        item = new HashMap<>();
        item.put("icon",R.drawable.liying6);
        item.put("title","赵丽颖");
        item.put("content","资料");
        arrayList.add(item);
  return arrayList;
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {//接口 AdapterView.OnItemClickListener的方法
        switch(i){//HashMap的值从零开始
            case 0:
                Intent intent = new Intent(this, Android_log_Activity.class);
                startActivity(intent);
                break;
            case 1:
               intent = new Intent(this, Button_activity.class);
                startActivity(intent);
                break;
            case 2:
              intent = new Intent(this, Code_Activity.class);
                startActivity(intent);
                break;
            case 3:
                intent = new Intent(this, Linear_Activity.class);
                startActivity(intent);
                break;
        }
        MySimpleAdapter mySimpleAdapter = (MySimpleAdapter) adapterView.getAdapter();//得到mySimpleAdapter不能用new
        HashMap<String ,Object> item = (HashMap<String, Object>) mySimpleAdapter.getItem(i);//得到HashMap的具体对象
        String title = (String) item.get("title");
        String content = (String) item.get("content");
        
        Snackbar.make(view,title,Snackbar.LENGTH_SHORT).show();

    }
    自定义适配器
    客户的想法总是千奇百怪,为了满足需要,我们可以自己定义一个适配器
    public class MySimpleAdapter extends BaseAdapter {//自定义适配器必须继承BaseAdapter
    
    public List<HashMap<String,Object>> list = new ArrayList<>();//本适配器打算的用途
    public LayoutInflater layoutInflater;//解析器,布局文件的解析全靠它
    
    public MySimpleAdapter(Context context,List<HashMap<String,Object>> list){
        this.list=list;
        layoutInflater = LayoutInflater.from(context);
    }
    public int getCount() {
        return list.size();//List<HashMap<String,Object>>所装的对象多少
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);//得到HashMap的具体对象
    }

    @Override
    public long getItemId(int i) {//得到HashMap的具体对象的id
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = layoutInflater.inflate(R.layout.activity_demo__simple_layout,null);//这是我们想要界面的视图activity_demo__simple_layout是xml基本布局,v 的布局就是它

        ImageView iconimag = (ImageView) v.findViewById(R.id.simple_demo_imageview);//activity_demo__simple_layout布局里每个控件的id
        TextView titletxt = (TextView) v.findViewById(R.id.simple_demo_textviewtitle);
        TextView contenttxt = (TextView) v.findViewById(R.id.simple_demo_textviewcontent);

        HashMap<String,Object> item = (HashMap<String, Object>) getItem(i);//获取存放的每一条项
        int icon = (int) item.get("icon");//通过键获得值

        String title = (String) item.get("title");
        String content  = (String) item.get("content");

        iconimag.setImageResource(icon);//从新赋值
        titletxt.setText(title);
        contenttxt.setText(content);
        return v;
    }
}
    
   


Java 实现适配器(Adapter)模式

平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。...
  • jjwwmlp456
  • jjwwmlp456
  • 2014年10月08日 15:21
  • 7873

浅析android适配器adapter中的那些坑

做项目中遇到的,折磨了我将近两天,今天把经验分享出来,让大家以后少走点弯路,好了,简单来说一下什么是android的适配器,如何定义,如何增加适配器的重用性,如何去降低程序的耦合性 适配器顾名思义是...
  • qq_23195583
  • qq_23195583
  • 2015年07月10日 12:55
  • 2212

打造万能Adapter(适配器)——适用于ListView、GridListView

整理总结自鸿洋的博客:http://blog.csdn.net/lmj623565791/article/details/38902805
  • lvyoujt
  • lvyoujt
  • 2016年06月11日 10:38
  • 5633

C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) (Level 300)

  • 2008年09月13日 15:54
  • 7.2MB
  • 下载

Microsoft_LoopBack_Adapter_配置为系统的主网络适配器

  • 2012年01月13日 18:02
  • 121KB
  • 下载

万能适配器adapter

  • 2015年07月20日 15:15
  • 2KB
  • 下载

通用的adapter适配器

  • 2016年10月11日 11:12
  • 1.65MB
  • 下载

RecycleView通用的Adapter适配器

  • 2016年04月12日 17:53
  • 6.91MB
  • 下载

ViewHolder和Adapter打造万能适配器(优化)

  • 2016年06月24日 14:09
  • 631KB
  • 下载

ViewHolder Adapter打造万能适配器

  • 2016年06月24日 11:41
  • 631KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:adapter(适配器)
举报原因:
原因补充:

(最多只允许输入30个字)