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);
  • 相关阅读:
    LOJ.2721.[NOI2018]屠龙勇士(扩展CRT 扩展欧几里得)
    Codeforces.959E.Mahmoud and Ehab and the xor-MST(思路)
    BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
    Codeforces.838E.Convex Countour(区间DP)
    Codeforces.838D.Airplane Arrangements(思路)
    Codeforces.997C.Sky Full of Stars(容斥 计数)
    Codeforces.786B.Legacy(线段树优化建图 最短路Dijkstra)
    BZOJ.3759.Hungergame(博弈论 线性基)
    LOJ.2718.[NOI2018]归程(Kruskal重构树 倍增)
    序列化二叉树
  • 原文地址:https://www.cnblogs.com/blueofsky/p/2321246.html
Copyright © 2011-2022 走看看