Android 之自定义 item 的 ListView
来源:互联网 发布:淘宝店主进货渠道 编辑:程序博客网 时间:2024/06/05 03:13
从 iOS 的 TableView 突然转到 Android 的 ListView, 说实话,很恶心。各种不方便,不要问我为什么学 Android,我也不想,唉,牢骚归牢骚,既然学了,就得学到点什么,不然既浪费时间,又什么都没得到,太亏了。记录一下学习的历程。
在使用 ListView 的时候,大部分我们都会自定义 item,iOS 也一样,会自定义 cell。不然使用系统为我们提供的几种格式是满足不了我们的各式各样的需求的。
废话到此为止。
1.先在 xml 文件中布局:
<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_listView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" />
2.创建模型文件
相当于 iOS 中的 model 文件,每写一个东西,就得去 iOS 中找对应的东西,这属于思维固化了。慢慢改正,不过这样能方便快速的理解这些东西。
public class Teacher { private String name; private int imageID; //setter和getter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImageID() { return imageID; } public void setImageID(int imageID) { this.imageID = imageID; }}
相比较而言,Android 的模型文件真的很麻烦,定义一个属性,就得写它的 getter 和 setter 方法。也许有其他的办法,只是我还不知道。
3.创建Adapter
这个适配器,在我的理解中就相当于 iOS 中的自定义 cell 了,比 iOS 方便的是,iOS 的那些数据源方法都在这里实现。一般的话,自定义的 adapter 会继承于 BaseAdapter
。
1.实现数据源方法
@Override public int getCount() { //返回多少行数据 return mList.size(); } @Override public Object getItem(int position) { //获取每一行的数据 return mList.get(position); } @Override public long getItemId(int position) { //获取行号 return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { //UI 刷新的代码主要在这里实现 return null; }
2.创建一个构造方法
这里是举例说明:
public TeacherAdapter(ArrayList<Teacher> mList, Context mContext) { this.mList = mList; this.mContext = mContext; }
4.给 item 布局
创建一个 item 的 xml 文件,每一个 item 的布局都在这个文件中进行。
<ImageView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/item_imageView" android:layout_marginTop="5dp" android:layout_marginLeft="10dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/item_textView" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical"/>
这里我给每个 item 上定义了两个控件,一个 TextView,一个 ImageView。是线性布局。
5.给控件赋值
接下来再回到 adapter 文件中的 getView 方法中,在这个方法中为控件赋值。
@Override public View getView(final int position, View convertView, ViewGroup parent) { //UI 刷新的代码主要在这里实现 //获取老师的数据 final Teacher teacher = mlist.get(position); //根据layout文件创建布局 View oneTeacherView = LayoutInflater.from(mContext).inflate(R.layout.teacher_item,parent,false); //获取ImageView和TextView ImageView imageView = (ImageView) oneTeacherView.findViewById(R.id.item_imageView); TextView textView = (TextView) oneTeacherView.findViewById(R.id.item_textView); //根据数据分别为imageView和textView赋值 imageView.setImageResource(teacher.getImageID()); textView.setText(teacher.getName()); return oneTeacherView; }
6.设置数据源
接下来回到 Activity 文件中,获取 listView 对象:
//因为这里是本地数据,所以将 listView 设置为了局部变量,本地数据也不需要在开启线程去刷新UIArrayList<Teacher> teacherList = new ArrayList<Teacher>();Teacher teacher = new Teacher();teacher.setName("jack");teacher.setImageID(R.mipmap.header_image);teacherList.add(teacher);//我这里只添加了一条数据,如果像添加的话,添加进这个数组就行ListView listView = (ListView)findViewById(R.id.main_listView);TeacherAdapter adapter = new TeacherAdapter(teacherList,this);listView.setAdapter(adapter);
到这里,一个完整的自定义 item 的 ListView 算是完成了。但是在实际开发中,大部分的应用场景都是从网络端获取数据,然后给 ListView 赋值。这个等我学到网络的时候再来介绍一下。
如有不对之处,请多多指正!达者为师,谢谢!
- Android 之自定义 item 的 ListView
- Android学习笔记(十)ListView之自定义ListView Item
- Android 自定义Adapter以实现自定义填充ListView的Item
- android之listview的item不可点击
- android之listview的item不可点击
- 自定义ListView item的例子
- android自定义ListView的Item无法响应OnItemClick的解决办法
- Android自定义ListView的Item无法响应OnItemClick的解决办法
- 自定义View之可删除item的ListView
- Android 自定义ListView格局和各Item的样式
- Android—自定义Adapter实现多种Item视图的ListView
- Android开发--自定义控件实现listview的滑动删除item
- Android开发ListView控件自定义Item
- Android 自定义ListView Item侧滑删除
- Android 自定义ListView中的Item样式
- android fragment中带有listview,自定义item
- Android之Listview(item为单选题)自定义adapter,像考试时前面的10几道单选题的实现
- Android 不同类型item的listview
- 每日一c,.用strlen(),sizeof() 及空指针的梳理(三)
- bootstrap-导航条
- 简单的iOS通讯录操作封装(添加联系人、检查号码是否存在
- 推荐开发人员看的较有影响力的书籍
- 【Tools】【Android】像大牛一样写代码,31 款 Android 开发者工具汇总
- Android 之自定义 item 的 ListView
- java数组、集合使用及相互转换
- VS2005 开发ArcGIS Add-in时报“ValidateAddInXMLTask任务意外失败错误”解决办法-附Visual Studio 2013 Shell (Isolat)
- CentOS7安装SVN
- Android
- 决策树02——决策树的构建
- linux tcp dump使用方法
- Spark Q&A : Task/Object not serializable 任务不能序列化
- 99 C语言空指针NULL以及void指针