zoukankan      html  css  js  c++  java
  • [android] listview入门

    Listview组件非常重要,4分之一的时间都是在搞这个,还是通过上一节的数据库,写个for循环,插入50条数据。

    先使用笨方法显示数据,根布局LinearLayout 定义一个id,在activity里面获取这个id

    获取PersonDao对象,调用dao对象的查询全部的方法,得到一个list集合的数据。

    遍历这个集合,遍历中调用person实体类对象的toString()方法,得到一条记录的字符串。

    遍历中实例化TextView对象,调用TextView对象的setText()方法,把一条信息放进去。

    调用LinearLayout对象的addView(child)方法,child参数就是子view对象

    笨方法代码:

            LinearLayout lv=(LinearLayout) findViewById(R.id.lv);
            PersonDao dao=new PersonDao(this);
            List<Person> persons=dao.select();
            for(Person person:persons){
                TextView tv=new TextView(this);
                tv.setText(person.toString());
                lv.addView(tv);
            }

    此时屏幕高度不够,超出去的信息会直接隐藏,系统给提供了一个组件叫ScrollView可以上下滚动,包裹一下LinearLayout,此时会提示命名空间那里错误,把命名空间放在SorollView里,指定宽度和高度都是填充父窗体

    当数据量比较大时,这样直接new出无数对象很消耗资源,应该是在滑动过程中动态new出组件对象,超出视线就销毁掉,这个时候引入了新的控件ListView

    获取ListView对象,通过findViewById()方法,调用ListView对象的setAdapter(adapter)方法设置数据绑定到ListView,参数是一个ListAdapter接口类型,我们要实现这个接口,把实现类对象传进去,定义一个私有的内部类实现ListAdapter,这时会要求实现几十个方法,太多了,系统为我们提供了一个实现类BaseAdapter,默认的实现类大部分都是以BaseXxxSimpleXxxDefaultXxx开头

    BaseAdapter是一个抽象类,要实现他的抽象方法,内部类继承BaseAdapter实现以下方法

    getCount(),返回int数据的条数,把我的数据集合定义成成员属性,调用List集合size()方法

    getItem()

    getItemId()

    getView(position,) 控制索引位置的View对象,position是当前集合的索引,

    在这个方法中,我们可以实例化TextView对象,需要传入上下文对象,使用getApplicationContext()获取上下文,调用TextView对象的setText(),数据是List集合调用get()方法,传入索引position获得,返回那个TV对象。在这个方法中Log.i()打印日志可以看到只会生成视线范围内的View对象。

    activity代码:

    package com.tsh.database;
    
    import java.util.List;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    
    import com.tsh.database.dao.PersonDao;
    import com.tsh.database.domain.Person;
    
    public class MainActivity extends Activity {
        private List<Person> persons;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ListView lv=(ListView) findViewById(R.id.mylist);
            PersonDao dao=new PersonDao(this);
            persons=dao.select();
            lv.setAdapter(new MyAdapter());
        }
        private class MyAdapter extends BaseAdapter{
    
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return persons.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;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                Log.i("MainActivity", "生成对象"+position);
                TextView tv=new TextView(getApplicationContext());
                Person person=persons.get(position);
                tv.setText(person.toString());
                return tv;
            }
            
        }
    }

  • 相关阅读:
    个人阅读作业Week7
    2015年团队项目选择
    实验与作业(Python)-02 Python函数入门与温度转换程序(函数、input、eval、int、float、列表)
    实验与作业(Python)-03 Python程序实例解析(函数、循环、range、turtle)
    实验与作业(Python)-04 数据类型、数学函数与字符串
    Java第05次实验提纲(Java图形界面编程)
    Python能做些什么?
    Python教学相关资料
    使用邮件交流的好处
    Java9相关资料(JShell简易教程等)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5259872.html
Copyright © 2011-2022 走看看