zoukankan      html  css  js  c++  java
  • Android ListView

    1、使用ArrayAdapter作为ListView的Adapter

      初始化ArrayAdapter的resouceId,可以自己构造layout,也可以使用系统提供的layout(android.R.layout中list_item相关的resourceId可以用于ListView)。

      simple_list_item_1、simple_list_item_activated_1等都可以,但是simple_list_item_2、simple_list_item_activated_2需要制定显示内容的TextView。

    2、自己定义一个Adapter用于呈现ListView,这个Adapter继承自BaseAdapter

      首先,定义一个Layout用于呈现ListView中的 Item    

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
        
        <ImageView android:id="@+id/iv_listitem"
            android:layout_width="80dp"
            android:layout_height="80dp" 
            android:contentDescription="img"/>
    
        <LinearLayout android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical">
            
            <TextView
                android:id="@+id/tv_large"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"/>
    
        
            <TextView
                android:id="@+id/tv_small"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall" 
                android:layout_gravity="right"/>
            
        </LinearLayout>
    
    </LinearLayout>

      定义自己的Adapter类,主要内容是重写getView方法。这里需要注意的地方是getView传递的参数convertView,是为了提高系统性能而准备的。因为如果ListView成员很多,一屏不能够显示所有的Item(而这种情况是很普遍的),这时用户在向上/向下查看Item的时候,新出现的Item将被新建,看不到的Item将会销毁。这样就会增加创建销毁对象的系统开销,而且垃圾回收也未必会即使清理空间。此时,提供一个convertView对象,这个对象代表的就是刚刚被隐藏起来,将要被销毁的Item,开发人员可以使用这个view对象呈现新的内容,即节省了空间,也节省了时间。

    public View getView(int position, View convertView, ViewGroup parent) {
            LinearLayout layout = null;
            
            if (convertView == null) {
                layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.listview_item, null);
            } else {
                layout = (LinearLayout) convertView;
            }
            
            User user = coll[position];
            ImageView iv = (ImageView) layout.findViewById(R.id.iv_listitem);
            TextView tv_large = (TextView) layout.findViewById(R.id.tv_large);
            TextView tv_small = (TextView) layout.findViewById(R.id.tv_small);
            iv.setImageResource(user.getImageId());
            tv_large.setText(user.getName());
            tv_small.setText(user.toString());
            
            return layout;
        }

      在主Activity中创建该Adapter,并调用ListView对应的setAdapter方法即可。这个主Activity可以直接继承自ListActivity,然后直接调用setListAdapter即可。需要注意的是,如果这个主Activity需要定义自己的layout用于呈现定制化信息的时候,只需要在自己定义的layout中包含一个ListView,并且这个ListView的id要设置成 @android:id/list

    3、如果想要在用户点击ListItem的时候,有某种效果出现的话,需要添加ListView.setOnItemClickListener事件,重写onItemClick方法;如果Activity直接继承自ListActivity,则可以直接重写onListItemClick方法。在onItemClick方法和onListItemClick方法中获取对象的方式,可以通过Adapter对象来获取,也可以通过这两个方法的第一个参数来获取。其实,最终调用的都是Adapter对应的getItem方法。

      不继承自ListActivity:

      @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            User u = (User) l.getItemAtPosition(position);        
            Toast.makeText(this, u.toString(), Toast.LENGTH_LONG).show();
            
            super.onListItemClick(l, v, position, id);
        }

      继承自ListActivity

    lv.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    //从Adapter获取元素对象
    //                User user = adapter.getItem(position);
                    
                    User user = (User) parent.getItemAtPosition(position);
                    TextView tv1 = (TextView) view.findViewById(android.R.id.text1);
                    tv1.setText(user.getName());
                }
            });
  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/huanyou/p/5082846.html
Copyright © 2011-2022 走看看