基于BaseAdapter的混合view List
实现步骤:
1.在xml布局文件中添加ListView控件节点并且设置好相关属性
2.在activity里findViewById 找到ListView控件对象
3.创建ListView的适配器adapter (这里采用自定义的Adapter类实现BaseAdapter接口)
4.在自定义的Adapter类里实现它的方法{
getView:
最重要的就是通过布局文件解析出一个布局对象ll;
其次获取当前要显示的cell内容
image = getItem(position);
获取image中的id,name,dec属性。
通过布局对象ll,来设置imageview,textview的属性
返回布局对象ll
}
5.给ListView绑定adapter
PS:这里需要两个xml文件,一个是用来显示ListView的activity.xml文件
另外一个是定义cell风格的xml文件,就是得到ll对象所要解析的layout.xml文件。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/lv_images" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/image_cell" android:layout_width="120dp" android:layout_height="120dp" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> </LinearLayout>
package cn.jinyejun.ui_listview; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import cn.jinyejun.ui_adapter.ImageListAdapter; public class ImageListView extends Activity { private ListView lv; //ListView组件 private ImageListAdapter adapter; //ListView组件的适配器 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_imagelist); //创建自定义的adapter adapter = new ImageListAdapter(this); //通过id索引到ListView的组件 lv = (ListView) findViewById(R.id.lv_images); //绑定listView的适配器 lv.setAdapter(adapter); } }
package cn.jinyejun.ui_adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import cn.jinyejun.information.Image; import cn.jinyejun.ui_listview.R; /** * 自定义的ListView baseAdapter的适配器 * 每个cell,左侧显示图片,右侧显示文本 * @author jinyejun * */ public class ImageListAdapter extends BaseAdapter { private Context context; //上下文 private Image[] images; //所有cell内容的对象 public ImageListAdapter(Context context) { this.context = context; //这里有三张图片和对应的三组文本 images = new Image[] { new Image(R.drawable.img1, "image 1", "image 1 is created"), new Image(R.drawable.img2, "image 2", "image 2 is created"), new Image(R.drawable.img3, "image 3", "image 3 is created") }; } //返回所有显示对象的长度 @Override public int getCount() { return images.length; } //得到position对应的image对象 @Override public Image getItem(int position) { return images[position]; } //得到对应position的item对象的id @Override public long getItemId(int position) { return position; } //显示cell内视图 @Override public View getView(int position, View convertView, ViewGroup parent) { //这里是为了防止下拉时候converView就会产生新的对象而内存溢出 //如果下拉得到新的view视图,那么就将该视图存放到layout对象里 LinearLayout ll = null; if (convertView != null) { ll = (LinearLayout) convertView; } else { //通过布局解析器解析出一个布局对象参数(布局文件id,null) ll = (LinearLayout) LayoutInflater.from(context).inflate( R.layout.listcell_image, null); } //通过id在布局对象内找到对应的三个组件 ImageView iv = (ImageView) ll.findViewById(R.id.image_cell); TextView tvTitle = (TextView) ll.findViewById(R.id.tv_title); TextView tvContent = (TextView) ll.findViewById(R.id.tv_content); //得到当期显示的image对象,分别给三个组件添加属性 Image image = getItem(position); iv.setImageResource(image.getIconId()); tvTitle.setText(image.getName()); tvContent.setText(image.getDec()); return ll; } }
package cn.jinyejun.information; /** * ListView中每个item里存放的数据对象 * @author jinyejun * */ public class Image { private int iconId; private String name; private String dec; public Image(int inconId, String name, String dec) { this.iconId = inconId; this.name = name; this.dec = dec; } public int getIconId() { return iconId; } public void setIconId(int iconId) { this.iconId = iconId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDec() { return dec; } public void setDec(String dec) { this.dec = dec; } }
还有一种方式直接让Activity继承ListActivity
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@android:id/list" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" > </ListView> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="click me" /> </LinearLayout>
package cn.jinyejun.ui_listview; import android.app.ListActivity; import android.os.Bundle; import cn.jinyejun.ui_adapter.ImageListAdapter; public class ActivityListView extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_image); setListAdapter(new ImageListAdapter(this)); } }
相关推荐
3. **弹性滚动(Fling)**:Fling是Android中一种常见的手势识别,常用于实现快速滑动效果。在ListView中,我们可以利用`AbsListView.OnFlingListener`来监听和处理用户的Fling手势。当用户快速滑动列表时,我们可以...
在Android开发中,ListView是一种常用的UI组件,用于展示大量数据列表。它允许用户滚动查看内容,同时提供了多种交互方式,如点击、长按等。在本示例中,我们将探讨如何实现一个支持多选功能的ListView,即"android...
在Android开发中,UI设计是用户体验的关键部分,ListView作为常用的数据展示组件,其滑动删除效果可以提升应用的交互性和用户友好性。本篇将详细探讨如何实现Android UI中的ListView滑动删除效果,以SwipeListView为...
在Android开发中,将...总之,Android应用连接后台MySQL数据库并在ListView中展示数据,是一个涉及网络通信、数据解析、UI设计等多个环节的过程。理解和掌握这个过程,对于Android开发者来说,是非常重要的实践技能。
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。当用户滚动到ListView的底部时...这个过程需要对Android的基础组件和数据操作有深入的理解,同时也要注意性能优化,避免频繁的网络请求和UI刷新。
在Android开发中,ListView是一种常用的UI组件,用于展示大量数据列表。这个"Android实现ListView的增删改查Demo"是一个实战教程,旨在教你如何在Android应用中实现对ListView中的数据进行添加、删除、修改和查询...
在Android开发中,ListView是一种常见的UI组件,常用于展示大量可滚动的数据列表。时间轴(TimeLine)是一种直观展示事件顺序和时间关系的布局,它通常由一系列的时间节点和连接线组成,每个节点代表一个事件,连接...
老二牛车教育程矢 AndroidUI之ListView.ppt
在Android开发中,`ListView`是一种常用的组件,用于展示大量数据列表。而`PopupWindow`则是用来实现临时显示一个小窗口的工具,常用于快速操作或者下拉菜单等场景。本篇将详细介绍如何在用户点击`ListView`时弹出一...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在这个场景中,我们需要为ListView的每个Item中的按钮添加点击事件,并且在按钮被点击时能够获取到对应Item中的TextView的文本信息。以下是对...
在Android开发中,UI设计是至关重要的一环,而水平滑动的ListView,即Horizontal ListView,是一种常见的组件,用于展示横向滚动的数据列表。本篇将深入探讨这个话题,并结合`RecyclerView`,一个更现代且功能强大的...
本教程将通过一个名为"android应用源码Android重写listview实现下拉刷新.zip"的压缩包,深入探讨如何在Android中自定义ListView并实现下拉刷新功能。这个压缩包包含了一份用于学习和参考的源码,主要涉及以下几个...
### Android-ListView中嵌套(ListView)控件兼容问题 #### 背景与问题描述 在Android开发中,有时我们需要在`ListView`中嵌套另一个`ListView`以实现更复杂的用户界面设计。然而,在实际操作过程中可能会遇到一些...
【Android UI设计与ListView详解】 在Android开发中,ListView是一个非常重要的组件,它用于展示大量...通过程矢老师的AndroidUI之ListView教程,开发者可以深入理解ListView的工作原理,并学会如何在实践中灵活运用。
3. **数据加载策略**:ListView支持懒加载,即只加载可视区域内的数据。你可以通过实现`OnScrollListener`监听滚动事件,根据当前滚动状态判断是否需要加载更多数据。这种方式可以避免一次性加载大量数据导致的内存...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。ListView下拉刷新功能是现代移动应用中的一个常见特性,允许用户通过下拉列表来获取最新的数据,如社交媒体的新消息或天气更新。这个"Android...
如果你希望改变背景,但不希望滚动时破坏整体UI效果,可以通过`android:cacheColorHint`设置颜色,或者设置为透明(`#00000000`)以适应自定义背景图片。 4. **divider属性**: - `android:divider="@drawable/...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。而“悬浮bar”(Floating Bar)则是在ListView滚动时始终固定在屏幕顶部或底部的导航栏,它可以提供筛选、分组等功能,增强用户体验。这个...
Android为ListView添加圆角边框效果,安卓UI设计的例子,默认情况下ListView的外框是直角的,也就是大家习惯的样式,但为了美化更突出,或者与你的应用风格更吻合,有时候可能修饰成圆角边框,本例子就是实现了这一...