zoukankan      html  css  js  c++  java
  • Android 采用Layout Inflater创建一个View对象

    接着上文《Android ListViewview入门》,本文使用android的Inflater来实现

    在layouyt文件夹中新建一个list_item.xml的文件,添加如下代码:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/ll_root"
        android:layout_width="match_parent"
        android:layout_height="60dip"
        android:gravity="center_vertical"
        android:orientation="horizontal">
    
        <TextView
            android:id="@+id/tv_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:text="id"
            android:textColor="#ff0000"
            android:textSize="16sp" />
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:gravity="center_vertical"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/tv_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dip"
                android:text="姓名"
                android:textColor="#000000"
                android:textSize="18sp" />
    
            <TextView
                android:id="@+id/tv_phone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dip"
                android:layout_marginTop="5dip"
                android:text="电话"
                android:textColor="#88000000"
                android:textSize="16sp" />
        </LinearLayout>
    
    </LinearLayout>

    界面布局如下:

    代码如下:

    package com.wuyudong.db;
    
    import java.util.List;
    
    import com.wuyudong.db.dao.PersonDao;
    import com.wuyudong.db.domain.Person;
    
    import android.os.Bundle;
    import android.text.style.LeadingMarginSpan;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.app.Activity;
    import android.graphics.Color;
    
    public class MainActivity extends Activity {
    
        private ListView lv;
        private List<Person> persons;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            PersonDao dao = new PersonDao(this);
            persons = dao.findAll();
            lv = (ListView) findViewById(R.id.lv);
    
            lv.setAdapter(new MyAdapter());
        }
    
        // 默认实现类形如: simplexxx, basexxx, defaultxxx
        private class MyAdapter extends BaseAdapter {
    
            private static final String TAG = "MyAdapter";
    
            /**
             * 控制ListView里面总共有多少条目
             */
            @Override
            public int getCount() {
                return persons.size(); // 条目个数==集合的size
            }
    
            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return 0;
            }
    
            //控制每个条目所显示的内容,依据position表示的位置来显示
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                
                // 得到某个位置对应的person对象
                Person person = persons.get(position);
                View view = View.inflate(MainActivity.this, R.layout.list_item, null);
                //一定要在view对象里面寻找孩子的id
                TextView tv_id = (TextView)view.findViewById(R.id.tv_id);
                tv_id.setText("id:" +person.getId());
                
                TextView tv_name = (TextView)view.findViewById(R.id.tv_name);
                tv_name.setText("姓名:" +person.getName());
                
                TextView tv_phone = (TextView)view.findViewById(R.id.tv_phone);
                tv_phone.setText("电话:" +person.getNumber());
                return view;
                
            }
    
        }
    }

    运行后的效果如下:

    如果将上面的代码tv_id.setText("id:" +person.getId());改为tv_id.setText(person.getId()); 程序会报错。

    原因:person.getId()返回值为int类型,而setText函数会从R资源文件中查找,显然是找不到的。

    所以修改为tv_id.setText(person.getId()+""); 即可


    总结:

    ##listview使用的步骤
    1. 定义布局文件 xml声明 ListView节点
    2. 找到listview
    3. 设置数据适配器
    4. 实现getCount() 返回有多少个条目
    5. 实现getView() 返回每个位置显示的内容view对象。
    6. 优化listview 复用 convertView

  • 相关阅读:
    盘符格式转换成NTFS格式
    jdk环境变量配置
    修改mysql密码
    端口占用解决
    程序执行原理
    第一个Python程序
    pip安装第三方库失败的问题
    windows本地安装mongoDB并且安装可视化工具studio 3t
    开发时前端测试方法
    虚拟机配置vimrc
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5584237.html
Copyright © 2011-2022 走看看