`
hellojyj
  • 浏览: 61777 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Android UI ListView(3)

 
阅读更多

基于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));
	}
}

 

 

  • 大小: 97.4 KB
分享到:
评论

相关推荐

    Android 实现ListView 3D效果 - 2 - 弹性滚动,Fling

    3. **弹性滚动(Fling)**:Fling是Android中一种常见的手势识别,常用于实现快速滑动效果。在ListView中,我们可以利用`AbsListView.OnFlingListener`来监听和处理用户的Fling手势。当用户快速滑动列表时,我们可以...

    android多选ListView示例

    在Android开发中,ListView是一种常用的UI组件,用于展示大量数据列表。它允许用户滚动查看内容,同时提供了多种交互方式,如点击、长按等。在本示例中,我们将探讨如何实现一个支持多选功能的ListView,即"android...

    Android UI ListView的滑动删除效果之SwipeListView

    在Android开发中,UI设计是用户体验的关键部分,ListView作为常用的数据展示组件,其滑动删除效果可以提升应用的交互性和用户友好性。本篇将详细探讨如何实现Android UI中的ListView滑动删除效果,以SwipeListView为...

    Android用listview显示数据库中的数据

    在Android开发中,将...总之,Android应用连接后台MySQL数据库并在ListView中展示数据,是一个涉及网络通信、数据解析、UI设计等多个环节的过程。理解和掌握这个过程,对于Android开发者来说,是非常重要的实践技能。

    Android 实现ListView滚动到底部自动加载数据

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。当用户滚动到ListView的底部时...这个过程需要对Android的基础组件和数据操作有深入的理解,同时也要注意性能优化,避免频繁的网络请求和UI刷新。

    Android实现ListView的增删改查Demo

    在Android开发中,ListView是一种常用的UI组件,用于展示大量数据列表。这个"Android实现ListView的增删改查Demo"是一个实战教程,旨在教你如何在Android应用中实现对ListView中的数据进行添加、删除、修改和查询...

    Android使用ListView实现时间轴

    在Android开发中,ListView是一种常见的UI组件,常用于展示大量可滚动的数据列表。时间轴(TimeLine)是一种直观展示事件顺序和时间关系的布局,它通常由一系列的时间节点和连接线组成,每个节点代表一个事件,连接...

    老二牛车AndroidUI之ListView.ppt

    老二牛车教育程矢 AndroidUI之ListView.ppt

    Android 点击listview弹出popupwindow弹出框

    在Android开发中,`ListView`是一种常用的组件,用于展示大量数据列表。而`PopupWindow`则是用来实现临时显示一个小窗口的工具,常用于快速操作或者下拉菜单等场景。本篇将详细介绍如何在用户点击`ListView`时弹出一...

    Android 为ListView每个Item上面的按钮添加事件

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在这个场景中,我们需要为ListView的每个Item中的按钮添加点击事件,并且在按钮被点击时能够获取到对应Item中的TextView的文本信息。以下是对...

    Android UI水平滑动的ListView(Horizontal ListView)

    在Android开发中,UI设计是至关重要的一环,而水平滑动的ListView,即Horizontal ListView,是一种常见的组件,用于展示横向滚动的数据列表。本篇将深入探讨这个话题,并结合`RecyclerView`,一个更现代且功能强大的...

    android应用源码Android重写listview实现下拉刷新.zip

    本教程将通过一个名为"android应用源码Android重写listview实现下拉刷新.zip"的压缩包,深入探讨如何在Android中自定义ListView并实现下拉刷新功能。这个压缩包包含了一份用于学习和参考的源码,主要涉及以下几个...

    Android-ListView中嵌套(ListView)控件兼容问题

    ### Android-ListView中嵌套(ListView)控件兼容问题 #### 背景与问题描述 在Android开发中,有时我们需要在`ListView`中嵌套另一个`ListView`以实现更复杂的用户界面设计。然而,在实际操作过程中可能会遇到一些...

    程矢AndroidUI之ListView.rar

    【Android UI设计与ListView详解】 在Android开发中,ListView是一个非常重要的组件,它用于展示大量...通过程矢老师的AndroidUI之ListView教程,开发者可以深入理解ListView的工作原理,并学会如何在实践中灵活运用。

    android BaseAdapter listView优化

    3. **数据加载策略**:ListView支持懒加载,即只加载可视区域内的数据。你可以通过实现`OnScrollListener`监听滚动事件,根据当前滚动状态判断是否需要加载更多数据。这种方式可以避免一次性加载大量数据导致的内存...

    Android应用源码 ListView下拉刷新 Demo

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。ListView下拉刷新功能是现代移动应用中的一个常见特性,允许用户通过下拉列表来获取最新的数据,如社交媒体的新消息或天气更新。这个"Android...

    Android之listview属性

    如果你希望改变背景,但不希望滚动时破坏整体UI效果,可以通过`android:cacheColorHint`设置颜色,或者设置为透明(`#00000000`)以适应自定义背景图片。 4. **divider属性**: - `android:divider="@drawable/...

    android之listview悬浮bar

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。而“悬浮bar”(Floating Bar)则是在ListView滚动时始终固定在屏幕顶部或底部的导航栏,它可以提供筛选、分组等功能,增强用户体验。这个...

    Android UI设计:为ListView添加圆角边框效果.rar

    Android为ListView添加圆角边框效果,安卓UI设计的例子,默认情况下ListView的外框是直角的,也就是大家习惯的样式,但为了美化更突出,或者与你的应用风格更吻合,有时候可能修饰成圆角边框,本例子就是实现了这一...

Global site tag (gtag.js) - Google Analytics