listview
来源:互联网 发布:accp和java 编辑:程序博客网 时间:2024/06/14 07:10
1. Listview的入门
listview是一个垂直滚动的列表. 可以展示一些条目 每个条目长得都查不多.
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="itheima.day05.MainActivity"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"></ListView></RelativeLayout>
2.listview里面展示的是一个条目一个条目的内容 每个条目的内容来自listAdapter 由于listAdapter默认实现地方法特别多,所以我们找到了listadapter的实现类—->baseAdapter,所以定义一个类继承BaseAdapter就可以了
class MyAdapter extends BaseAdapter { //listview一共需要展示多少个条目 @Override public int getCount() { return 100; } //根据position(索引)可以找到对应的条目 @Override public Object getItem(int position) { return null; } //根据position找到对应条目的id值 @Override public long getItemId(int position) { return 0; } //获取一个view 负责每个条目具体展示的内容 @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = new TextView(MainActivity.this); textView.setTextSize(24); textView.setText("传智播客"); return textView; } }
3.listview和适配器关联
lv.setAdapter(new MyAdapter());
代码实现过程
1.在布局中声明listview
2.listview优化
@Override public View getView(int position, View convertView, ViewGroup parent) { ///1.判断一下converview TextView textView ; if (convertView == null){ textView = new TextView(MainActivity.this); System.out.println("创建新的view对象:"+textView); }else{ //说明这个对象不为空 textView = (TextView) convertView; System.out.println("复用旧的对象:"+textView); } textView.setTextSize(22); textView.setText("传播"+position); return textView; } }
3.复杂listview效果制作
1.把要展示的listview效果通过布局做出来
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_icon" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/bg" /> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="今日头条" android:textSize="30sp" android:textColor="#000000" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_toRightOf="@id/iv_icon" /> <TextView android:id="@+id/tv_desc" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="今日头条老师老师过来过时了阿拉嘎嘎嘎" android:textSize="20sp" android:textColor="#999999" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_toRightOf="@id/iv_icon" android:layout_below="@id/tv_title" /></RelativeLayout>
2.通过View类提供的打气筒服务把一个布局转换为View
View view = View.inflate(MainActivity.this, R.layout.item, null);
4.获取打气筒服务常见写法
1.通过View类提供的一个静态方法获取打气筒服务
view = View.inflate(MainActivity.this, R.layout.item, null);
2.通过布局填充器类获取打气筒服务
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,null);
3.通过getsystemservice方法获取打气筒服务
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);view = layoutInflater.inflate(R.layout.item,null);
5.综合小案例(把数据库真实数据通过listview展示数据)
代码实现步骤
5.1先声明listview
<ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"></ListView>
5.2 当点击查询按钮的时候 把数据封装到集合
{ //1. 第一次是创建数据库 第二次调用就是打开数据库 SQLiteDatabase db = myOpenHelper.getWritableDatabase(); //2.执行一个插入的sql语句 当执行查询sql语句的时候不能使用execSQL方法 因为这个方法返回值是void// Cursor cursor = db.rawQuery("select * from info", null); id name phone /** * 参数1:表名 * 参数2 :代表要查询的列 new String[]{"id","name","phone"} null什么也不写就不知道要查什么 默认查所有 * 参数3:查询条件 没有查询条件 ? * 参数4: 对条件占位 * 参数5:group by 分组 不分组 * 参数6:having null */ Cursor cursor = db.query("info", null, null, null, null, null, null, null); //3.移动光标把数据取出来 if (cursor!=null){ while (cursor.moveToNext()){ //4.取出对应列的值 列的索引 从0开始// int id = cursor.getInt(0); String id = cursor.getString(0); String name = cursor.getString(1); String phone = cursor.getString(2); //5.创建一个bean对象 用来存查询信息 Person person = new Person(); person.setName(name); person.setPhone(phone); //6.把person对象加入到list集合 lists.add(person); } //7.listview和适配器关联 lv.setAdapter(new MyAdapter()); } //3.当db对象用完后 需要关闭 db.close(); }
5.3创建listview适配器对象
//定义listview的适配器 class MyAdapter extends BaseAdapter{ //展示listview一共有几个条目 应该是查询出来几个数据就展示几个 @Override public int getCount() { return lists.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } //获取一个view 用来展示每个条目的内容 1.手动创建一个view 2.通过打气筒把一个布局转换为一个view对象 @Override public View getView(int position, View convertView, ViewGroup parent){ //1.取集合里面取数据 Person person = lists.get(position); //2.通过打气筒把item转换为一个view对象 View view ; if (convertView == null){ view = View.inflate(MainActivity2.this,R.layout.item,null); }else{ view = convertView; } //3.把集合里面的数据展示出来 先到控件 眼睛看见的不一定真实的.神偷 报这个错的原因不赖你们 懒谷歌 TextView tv_name = (TextView) view.findViewById(R.id.tv_name); TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone); //4.更新数据 说明textview为空 tv_name.setText(person.getName()); tv_phone.setText(person.getPhone()); return view; } }
6.ArrayAdapter的使用
不管什么adapter 功能都是一样的.功能就是adapter负责把数据展示到listview上
arrayAdapter的使用
String objects[] = {"android","java","c","html","servler","jsp"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.找到lv ListView lv = (ListView) findViewById(R.id.lv); //2.给lv设置数据适配器 参数2:布局资源---->条目的布局资源--->到底画成什么样 看listview具体要展示什么数据. //参数3:条目里面的控件的id lv.setAdapter(new ArrayAdapter<String>(this,R.layout.item,R.id.tv,objects));// lv.setAdapter(new SimpleAdapter());// lv.setAdapter(new MyAdapter()); }
阅读全文
0 0
- listview
- listview
- listview
- ListView
- ListView
- listview
- listview
- listView
- ListView
- ListView
- ListView
- listview
- LIstView
- ListView
- listview
- ListView
- ListView
- ListView
- 第十一题 九度p38 ,贪心算法 cb的编译器出问题了,以后还是用dev吧
- bzoj 3252 攻略(长链剖分 + 贪心)
- android 自定义控件
- 笔记
- 剪花布条-简单字符串匹配
- listview
- 代理模式与Java动态代理
- xpath学习笔记
- 贪心算法-4.5单源最短路径之Dijkstra算法(松弛操作)
- linux常用命令command not found的解决方案(自己整理)
- Android 跳转到新浪微博
- Mysql加锁过程详解
- JavaScript专精系列(6)——FileReader 文件读取
- UI管理器以及BasePanel基本面板