当前位置: 首页 > news >正文

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

相关文章:

  • VS 类快捷键
  • /etc/motd and /etc/issue
  • java中的异常处理机制_函数覆盖时的异常特点
  • 关于狄克斯特拉算法(dijkstra)总结
  • CSS3实现两行或三行文字,然后多出的部分省略号代替
  • 函数与类
  • DT时代,哪些企业可以成为大数据公司?
  • linux诡异的半连接(SYN_RECV)队列长度
  • Linux静态库和共享库
  • 【Objective-C】04-第一个OC程序解析
  • Python哲学
  • linux ntp时间同步服务器搭建
  • 第二次冲刺阶段04
  • nodejs remote链接mysql数据库总结
  • 网站日志分析工具:WebLog Expert Lite
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【刷算法】从上往下打印二叉树
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 分享几个不错的工具
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端自动化解决方案
  • 如何选择开源的机器学习框架?
  • 数组的操作
  • raise 与 raise ... from 的区别
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • #stm32整理(一)flash读写
  • $().each和$.each的区别
  • $.ajax中的eval及dataType
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (分布式缓存)Redis持久化
  • (分类)KNN算法- 参数调优
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (译)2019年前端性能优化清单 — 下篇
  • ***利用Ms05002溢出找“肉鸡
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @Documented注解的作用
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [17]JAVAEE-HTTP协议
  • [Assignment] C++1
  • [BUUCTF 2018]Online Tool(特详解)
  • [C#]扩展方法
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C/C++]数据结构 堆的详解
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [Grafana]ES数据源Alert告警发送
  • [Linux]——彻底学通权限
  • [Linux]进程信号(信号入门 | 信号产生的方式 | 信号捕捉初识)
  • [poj] 3974 Palindrome
  • [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作...