android listview的适配器------baseadapter
来源:互联网 发布:js for循环 编辑:程序博客网 时间:2024/06/02 10:51
基础篇:
适配器是一种设计模式,在android 中 比如说listview gridview recyclerview 等 都用到这个概念。就是对于不同的数据源展示到列表或者网格中。需要一个适配器,适配器讲不同的数据源展示到列表当中去。 适配器其实也就是起一个桥梁作用。就像usb 接口一样 ,不管你MP3 PM4,手机,dvd等等 产品 你实现这个接口就行了。就能将数据和view 配合在一起使用了。
1,用到listview baseadapter 简单的布局文件
2,写一个类继承与baseadapter
3,将 适配器和listview 关联起来就行ok了
为了说明适配器的作用待会同一个listview 我会写出来两种适配器然后看不同的效果就 行了。
activity的布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!--既然要将listview 就不写那么多冗余的东西了 --> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView></LinearLayout>
listview item 的布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!--简单定义了listview 的item--> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:gravity="center" /></LinearLayout>
先给出适配器的写法
package com.lefeng.lfvideo.myndk.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.lefeng.lfvideo.myndk.R;import java.util.List;/** * Created by CYL on 2016/3/26. * email:670654904@qq.com */public class MyAdapter1 extends BaseAdapter{ //数据源 建议 包含一个对象 方便操作 private List<String> dataSource; //初始化 listview 每个item 的布局文件 private LayoutInflater inflater; /** * 构造器 * @param dataSource 数据源 * @param context 上下文 */ public MyAdapter1(List<String> dataSource, Context context) { this.dataSource = dataSource; this.inflater = LayoutInflater.from(context); } /** * 获取listview 总长度 也就是数据源的长度 * @return */ @Override public int getCount() { return dataSource.size(); } /** * 得到数据源上的对象 点击item的时候 可以获取数据然后进行操作 * @param i * @return */ @Override public Object getItem(int i) { return dataSource.get(i); } @Override public long getItemId(int i) { return i; } /** * 为了缓存 listview 上的 view 如iamgeview textview button 等view * 因为 每次findviewbyid 是很浪费资源的 * 对应listview 每个item的view * 这个到 android L 除了新得的组件recyclerview 已经把这个东西给简化了 有兴趣的可以去看看 */ private final class ViewHolder{ public TextView tv; } /** * 这个方法比较重要 就是每次初始化 listview item 的 view * @param i item 的位置 从0 开始 * @param view item 的view * @param viewGroup 父容器 * @return */ @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder = null; if(view == null){ viewHolder = new ViewHolder(); view = inflater.inflate(R.layout.mylistview_item1, null); viewHolder.tv = (TextView) view.findViewById(R.id.tv); //将viewholder 缓存起来 view.setTag(viewHolder); } else { //可以从holder 得到 viewHolder = (ViewHolder) view.getTag(); } viewHolder.tv.setText(dataSource.get(i)); return view; }}注释差不多了,不在啰嗦了。
activity的代码
package com.lefeng.lfvideo.myndk;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ListView;import com.lefeng.lfvideo.myndk.adapter.MyAdapter1;import java.util.ArrayList;import java.util.List;/** * Created by CYL on 2016/3/26. * email:670654904@qq.com */public class MyListViewActivity extends AppCompatActivity{ private ListView lv; private List<String> dataSource; private MyAdapter1 adapter1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置布局文件 setContentView(R.layout.mylistview_layout); //实例化listview lv = (ListView) findViewById(R.id.lv); //初始化数据源 可以从手机本地获取,可以从网络获取 等 dataSource = new ArrayList<>(); for (int i = 0;i<100;i++){ dataSource.add(getRandWorld()); } adapter1 = new MyAdapter1(dataSource,this); lv.setAdapter(adapter1); } /** * 随机产生 5位字符 * @return */ private String getRandWorld(){ String world = ""; for (int i = 0; i < 5; i++){ int val = (int) (Math.random()*26+1)+'a'; world += (char)val; } return world; }}
为了要说明适配器的作用下面 在实现一个适配器上面 activity的代码不变化 直接使用
变化在listview 的item 的布局文件上加了 imageview 对应的adapter 就不给出来 基本就是在获取view 设置view 值 数据源有变化 就是将 各个 item 的图片也存放一份 ,让你可以是id 可以是网络的url 等 看需求了
给出item 的布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <!--简单定义了listview 的item--> <ImageView android:layout_width="40dp" android:layout_height="40dp" android:layout_margin="10dp" android:src="@drawable/logo"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:gravity="center" android:layout_gravity="center_vertical" /></LinearLayout>改变布局后 改变数据源 适配器后看效果
可以看出 通过不同的数据源 可以显示不同的结果。。。。
0 0
- android listview的适配器------baseadapter
- Android组件ListView的适配器BaseAdapter
- ListView的优化 +BaseAdapter适配器
- 【Android】以BaseAdapter做适配器的ListView及其性能优化
- Android ListView适配器BaseAdapter中getItemViewType需要注意的问题
- Android-ListView适配器BaseAdapter的使用和优化
- Android学习ListView自定义布局,适配器BaseAdapter
- ListView的适配器BaseAdapter使用详解
- BaseAdapter自定义适配器及ListView的优化
- 学会使用listview的自定义baseadapter适配器
- listview gridview 的万能适配器 baseAdapter
- Android BaseAdapter适配器的问题
- BaseAdapter 作为 ListView 适配器
- ListView适配器BaseAdapter
- ListView 适配器BaseAdapter配置
- ListView适配器BaseAdapter
- 自定义ListView ,适配器(BaseAdapter)
- listview适配器Baseadapter
- 笔试练习一
- 模仿 微信 长按录音 功能 实现
- Hibernate入门
- Qt:Drag-Drop操作在QGraphicsView及Model/View框架下的实现
- Android LayoutInflater详解
- android listview的适配器------baseadapter
- hashCode与equals的区别与联系
- 洛谷 shlqsh数
- 博客搬家<( ̄︶ ̄)>
- Android的adb使用
- C++Primer第5版读书笔记(第9章)
- 写给准备参加秋招的学弟学妹们~一定要来看哦~
- 2016.3.19纪中——中山市小学生信息学邀请赛2016模拟赛
- 红糖水白糖水的交换