zoukankan      html  css  js  c++  java
  • Android开发指南中文版(十四)User InterfaceBinding to Data with AdapterView

    AdapterView是ViewGroup的子类,他的子View由一个绑定了某种数据类型的适配器(Adapter)来决定。当你需要在你的布局中显示存储的数据(不同于资源字符串或绘图资源)时,AdapterView 就非常有用。

    Gallery, ListView, 和 Spinner是AdapterView 的一个示例子类,你可以用来绑定指定类型的数据并且以某种方式显示。

    AdapterView 对象有两个主要职责:

    • 用数据填充布局
    • 处理用户的选取

    用数据填充布局(Filling the Layout with Data)

    把数据插入布局的典型做法是把AdapterView类绑定到一个适配器(Adapter)上,适配器会从外部源(可能是代码中的一个list或者设备数据库的查询结果)检索数据。

    下面的示例代码做如下事情:

    1. 同一个已经存在的View一起,创建一个 Spinner对象, 并且把它绑定到一个新的ArrayAdapter 对象上, 该适配器对象从本地资源中读取一组颜色值。
    2. 从一个View中创建另外一个 Spinner 对象,并且把它绑定到一个新的SimpleCursorAdapter 对象上,该适配器将从设备中上联系人中读取人名(参看Contacts.People章节)。
    // Get a Spinner and bind it to an ArrayAdapter that 
    // references a String array.
    Spinner s1 = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.colors, 
                                             android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResourc(android.R.layout.simple_spinner_dropdown_item);
    s1.setAdapter(adapter);
    // Load a Spinner and bind it to a data query.
    private static String[] PROJECTION = new String[] {People._ID, People.NAME};
    Spinner s2 = (Spinner) findViewById(R.id.spinner2);
    Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);
    SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,
        android.R.layout.simple_spinner_item, // Use a template that
    displays a text view
        cur, // Give the cursor to the list adapter
        new String[] {People.NAME}, // Map the NAME column in the people database to...
        new int[] {android.R.id.text1}); // The "text1" view defined in the XML template
    adapter2.setDropDownViewResourc(android.R.layout.simple_spinner_dropdown_item);
    s2.setAdapter(adapter2);
    

    注意,在此必须含有People._ID字段,该字段同 CursorAdapter 处于映射使用中,否则你将会得到一个异常。

    如果,在你的应用的生命周期中,你变更了正在被你的适配器读取的数据,你应该调用notifyDataSetChanged()方法。该方法将会通知附属的View,其数据已经改变并且他们需要更新自己。

    处理用户的选取(Handling User Selections)

    要处理用户的选取事件,可以通过设置类的AdapterView.OnItemClickListener成员来监听和捕获变更的选择。

    // Create a message handling object as an anonymous class.
    private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View v, int position, long id){
    	// Display a messagebox.
    	Toast.makeText(mContext,"You've got an event",Toast.LENGTH_SHORT).show();
        }
    };
    
    // Now hook into our object and set its onItemClickListener member
    // to our class handler object.
    mHistoryView =(ListView)findViewById(R.id.history);
    mHistoryView.setOnItemClickListener(mMessageClickedHandler);
  • 相关阅读:
    第十章 迭代器模式 Iterator
    第四章:使用Proxy代理让客户端服务端分工合作。
    第三章:真正弄清楚一个Mod的组织结构
    第二章:开始开发mod前你需要知道的一些事情
    第一章:在IDEA里搭建基于Forge的Minecraft mod开发环境
    Android实现真正的ViewPager【平滑过渡】+【循环滚动】!!!顺带还有【末页跳转】。
    关于坑爹的PopupWindow的“阻塞”争议问题:Android没有真正的“阻塞式”对话框
    快排-Go版本
    链表翻转(按K个一组)(Go语言)
    牛客刷题-重建二叉树(GO语言版)
  • 原文地址:https://www.cnblogs.com/blueofsky/p/2321246.html
Copyright © 2011-2022 走看看