`

Android学习08-----Android中的基本控件(下)(1)_滚动视图:ScrollView和列表显示:ListView

阅读更多

从这篇开始,总结一下 Android 中的一些复杂点的常用组件。

 

滚动视图: ScrollView

滚动视图的使用形式与各个布局管理器的操作形式类似,唯一不同的是,所有的布局管理器之中,可以包含多个组件,而滚动视图里只能有一个组件,所以所谓的视图指的就是提供一个专门的容器,这个容器里面可以装下多于屏幕宽度的组件,而后采用拖拽的方式显示所有 ScrollView 中的组件。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
	android:id="@+id/myscroll" 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical" 
		android:id="@+id/mylinear"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent">
	</LinearLayout>
</ScrollView>

 

ScrollViewActivity.java:

package com.iflytek.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

public class ScrollViewActivity extends Activity {

	private String data[] = { "xdwang", "xdwangiflytek.iteye.com", "王旭东",
			"Java、C#、Android", "790419465@qq.com", "xdwangiflytek@gmail.com",
			"13956027313", "工作地点:安徽合肥", "家乡:安徽滁州","格言:打倒小日本","钓鱼岛属于中国" };

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		LinearLayout layout = (LinearLayout) super.findViewById(R.id.mylinear); // 取得组件
		LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
				ViewGroup.LayoutParams.FILL_PARENT,
				ViewGroup.LayoutParams.WRAP_CONTENT); // 定义布局参数
		for (int x = 0; x < this.data.length; x++) { // 通过循环方式将以上的信息通过Button组件进行封装
			Button but = new Button(this);
			but.setText(this.data[x]); // 设置显示文字
			layout.addView(but, param); // 增加组件
		}
	}
}

 

列表显示: ListView

1 、基本功能实现 Demo

package com.iflytkek.activity;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListView01Activity extends Activity {
	
	private String data[] = { "xdwang", "xdwangiflytek.iteye.com", "王旭东",
			"Java、C#、Android", "790419465@qq.com", "xdwangiflytek@gmail.com",
			"13956027313", "工作地点:安徽合肥", "家乡:安徽滁州","格言:打倒小日本","钓鱼岛属于中国" };
	
	private ListView listView = null; // 定义ListView组件
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		this.listView = new ListView(this); // 实例化组件
		//simple_list_item_1,显示分风格
		this.listView.setAdapter(new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, this.data)); // 为ListView组件设置内容
		super.setContentView(this.listView) ;	// 显示组件
    }
}
 

2、SimpleAdapter
SimpleAdapter类主要功能是将List集合的数据转换为ListView可以支持的数据,而要想实现这种转换,首先需要定义一个数据的显示模版(专门定义一个布局管理器,基本上都是表格布局),在这个模版中可以定义ListView每行需要显示的所有组件,而在需要转换的List集合里保存的是多条Map集合的数据,这些Map集合里面保存着一些具体的要显示的信息,即:模版中每一个组件的ID实际上就相当于规定了里面保存的Map集合的key,而模版中每个组件的显示内容,则有Map保存的Value决定。这种操作也是ListView中操作最多的一种。
Layout/mian.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

	<TextView 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:textSize="25px"
		android:gravity="center_horizontal"
		android:text="王旭东信息列表" />
	
	<ListView
		android:id="@+id/datalist"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"/>

</LinearLayout>
 

Layout/data_list.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
	<TableRow>
		<ImageView
			android:id="@+id/icon"
			android:layout_height="wrap_content"
			android:layout_width="wrap_content"
			android:src="@drawable/file_icon"/>
		<TextView 
			android:id="@+id/_id"
			android:textSize="15px"
			android:gravity="center_vertical"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
		<!-- 这边的id使用下划线的主要目的是为了以后在使用数据存储的时候SQLite数据库规定好必须使用一个下划线的id表示主键 -->
		<TextView 
			android:id="@+id/name"
			android:textSize="15px"
			android:gravity="center_vertical"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</TableRow>
</TableLayout>

 

SimpleAdapterActivity.java:

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class SimpleAdapterActivity extends Activity {

	// 准备出若干个信息而这些信息以后将通过程序加入到内嵌的线性布局文件之中
	private String data[][] = { { "001", "xdwang" },
			{ "002", "xdwangiflytek.iteye.com" }, { "003", "王旭东" },
			{ "004", "Java、C#、Android" }, { "005", "790419465@qq.com" },
			{ "006", "xdwangiflytek@gmail.com" }, { "007", "13956027313" },
			{ "008", "工作地点:安徽合肥" }, { "009", "家乡:安徽滁州" },
			{ "0010", "格言:打倒小日本" }, { "0011", "钓鱼岛属于中国" }
			};
	private ListView datalist = null; // 定义ListView组件
	private List<Map<String, String>> listMaps = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.datalist = (ListView) super.findViewById(R.id.datalist); // 取得组件
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("_id", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("name", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			this.listMaps.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.listMaps,
				R.layout.data_list, new String[] { "_id", "name" } // Map中的key的名称
				, new int[] { R.id._id, R.id.name }); // 是data_list.xml中定义的组件的资源ID
		this.datalist.setAdapter(this.simpleAdapter);
	}
}
 

3、使用ListActivity
main.xml和data_list.xml和上面的不变
ListView04Activity.java:

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;

public class ListView04Activity extends ListActivity {// 继承了ListActivity类

	private String data[][] = { { "001", "xdwang" },
			{ "002", "xdwangiflytek.iteye.com" }, { "003", "王旭东" },
			{ "004", "Java、C#、Android" }, { "005", "790419465@qq.com" },
			{ "006", "xdwangiflytek@gmail.com" }, { "007", "13956027313" },
			{ "008", "工作地点:安徽合肥" }, { "009", "家乡:安徽滁州" },
			{ "0010", "格言:打倒小日本" }, { "0011", "钓鱼岛属于中国" } };

	private List<Map<String, String>> list = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("_id", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("name", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			this.list.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.list,
				R.layout.data_list, new String[] { "_id", "name" } // Map中的key的名称
				, new int[] { R.id._id, R.id.name }); // 是data_list.xml中定义的组件的资源ID
		super.setListAdapter(this.simpleAdapter); // 设置列表显示
	}
}
 

此时没有使用到main.xml文件,而只是利用了data_list.xml文件进行显示,虽然说可以完成列表的功能,但是这种显示风格并不特别实用,没有之前定义ListView组件,而后利用Activity程序设置内容显示方便。

4、事件处理
main.xml和data_list.xml和上面的不变
ListView05Activity.java

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class ListView05Activity extends Activity {

	private String data[][] = { { "001", "xdwang" },
			{ "002", "xdwangiflytek.iteye.com" }, { "003", "王旭东" },
			{ "004", "Java、C#、Android" }, { "005", "790419465@qq.com" },
			{ "006", "xdwangiflytek@gmail.com" }, { "007", "13956027313" },
			{ "008", "工作地点:安徽合肥" }, { "009", "家乡:安徽滁州" },
			{ "0010", "格言:打倒小日本" }, { "0011", "钓鱼岛属于中国" } };

	private ListView datalist = null; // 定义ListView组件
	private List<Map<String, String>> list = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作
	private TextView info = null;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.datalist = (ListView) super.findViewById(R.id.datalist); // 取得组件
		this.info = (TextView) super.findViewById(R.id.info); // 取得组件
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("_id", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("name", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			this.list.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.list,
				R.layout.data_list, new String[] { "_id", "name" } // Map中的key的名称
				, new int[] { R.id._id, R.id.name }); // 是data_list.xml中定义的组件的资源ID
		this.datalist.setAdapter(this.simpleAdapter);
		this.datalist.setOnItemClickListener(new OnItemClickListenerImpl()); // 单击选项
	}

	private class OnItemClickListenerImpl implements OnItemClickListener {

		@SuppressWarnings("unchecked")
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			Map<String, String> map = (Map<String, String>) ListView05Activity.this.simpleAdapter
					.getItem(position);
			String _id = map.get("_id");
			String name = map.get("name");
			ListView05Activity.this.info.setText("选中的数据项ID是:" + _id + ",名称是:"
					+ name);
		}
	}
}
 

5、复杂显示
Main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

   	<TextView 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:textSize="25px"
		android:gravity="center_horizontal"
		android:text="学习视频列表" />
   	
	<ListView
		android:id="@+id/datalist" 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"/>

</LinearLayout>
 

data_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
	<ImageView
		android:id="@+id/pic"
		android:layout_height="wrap_content"
		android:layout_width="wrap_content"
		android:padding="3px"/>
	<LinearLayout 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical"
		android:layout_width="150px"
		android:layout_height="wrap_content"
		android:gravity="left">
		<TextView 
			android:id="@+id/title"
			android:textSize="16px"
			android:padding="3px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
		<TextView 
			android:id="@+id/author"
			android:padding="3px"
			android:textSize="10px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</LinearLayout>
	<LinearLayout 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical"
		android:layout_width="200px"
		android:layout_height="wrap_content"
		android:gravity="left">
		<TextView 
			android:id="@+id/type"
			android:padding="3px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
		<ImageView 
			android:id="@+id/score"
			android:padding="3px"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</LinearLayout>
</LinearLayout>

 

ListView03Activity.java:

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class ListView03Activity extends Activity {

	private int pic[] = new int[] { R.drawable.pic_oracle,
			R.drawable.pic_javase, R.drawable.pic_javaweb,
			R.drawable.pic_javaee, R.drawable.pic_android, R.drawable.pic_game };
	private String data[][] = new String[][] { { "Oracle", "科大" },
			{ "Java SE", "小李" }, { "Java WEB", "花花" },
			{ "Java EE", "小王" }, { "Android", "乐乐" },
			{ "Java 游戏", "小三" } };

	private ListView datalist = null; // 定义ListView组件
	private List<Map<String, String>> list = new ArrayList<Map<String, String>>(); // 定义显示的内容包装
	private SimpleAdapter simpleAdapter = null; // 进行数据的转换操作

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.datalist = (ListView) super.findViewById(R.id.datalist); // 取得组件
		for (int x = 0; x < this.data.length; x++) {
			Map<String, String> map = new HashMap<String, String>(); // 定义Map集合,保存每一行数据
			map.put("pic", String.valueOf(this.pic[x])); // 与data_list.xml中的TextView组加匹配
			map.put("title", this.data[x][0]); // 与data_list.xml中的TextView组加匹配
			map.put("author", this.data[x][1]); // 与data_list.xml中的TextView组加匹配
			map.put("type", "免费");
			map.put("score", String.valueOf(R.drawable.start_05));
			this.list.add(map); // 保存了所有的数据行
		}
		this.simpleAdapter = new SimpleAdapter(this, this.list,
				R.layout.data_list, new String[] { "pic", "title", "author",
						"type", "score" } // Map中的key的名称
				, new int[] { R.id.pic, R.id.title, R.id.author, R.id.type,
						R.id.score }); // 是data_list.xml中定义的组件的资源ID
		this.datalist.setAdapter(this.simpleAdapter);
	}
}
 

 

分享到:
评论

相关推荐

    滚动视图ScrollView

    在Android开发中,ScrollView是一个非常重要的布局控件,它允许用户在内容超出屏幕显示范围时进行滚动查看。本文将深入探讨ScrollView的使用、特点、常见问题及其解决方案。 首先,ScrollView是一个可滚动的容器,...

    Android圆角ListView并完美解决和ScrollView共存问题

    在Android应用开发中,ListView是常用的视图组件,用于展示大量数据列表,而圆角ListView则是对默认样式的一种美化,可以提升用户界面的视觉效果。本文将深入探讨如何实现一个带有圆角的ListView,并解决其与...

    Android_ScrollView.zip_android_android scrollview_anriod viewfil

    2. **嵌套滚动**:需要注意的是,如果ScrollView的子视图中包含了已具有滚动功能的控件(如HorizontalScrollView,ListView,GridView,WebView等),可能会导致滚动冲突。在这种情况下,需要正确配置嵌套滚动行为,...

    解决ScrollView,ListView滚动条冲突

    在Android开发中,ScrollView和ListView是两种常用的布局控件,分别用于实现单向滚动和多行列表滚动。然而,当这两个控件同时出现在一个布局中时,常常会出现滚动条冲突的问题,导致用户体验下降。本篇文章将详细...

    android完美解决listView与ScrollView滑动冲突

    在Android开发中,ListView和ScrollView是两种常用的布局控件,分别用于展示大量可滚动的数据列表和容纳多个视图。然而,当ListView被嵌套在ScrollView内时,它们之间的滑动冲突是一个常见的问题。本篇文章将深入...

    Android应用源码下拉刷新控件(ListView好ScrollView版)-IT计算机-毕业设计.zip

    在Android应用开发中,下拉刷新控件是一个非常常见的功能,尤其在列表或者滚动视图中,用户可以通过下拉操作来获取最新的数据。本资源是一个关于Android应用源码的示例,专注于实现下拉刷新功能,特别适用于毕业设计...

    android listview ScrollView冲突 listview checkbox

    在Android开发中,ListView与...总之,处理ListView与ScrollView的冲突以及ListView中CheckBox的使用,需要深入理解Android的列表视图机制和适配器模式。合理的设计和编程实践能够帮助我们构建高效且用户友好的界面。

    Android--开发--下拉刷新控件(ListView好ScrollView版).rar

    在Android应用开发中,下拉刷新控件是一个非常常见的组件,尤其在列表或者滚动视图中,用户可以通过下拉操作来获取最新的数据。本教程主要围绕如何在ListView和ScrollView中实现下拉刷新功能进行讲解。 1. **下拉...

    解决Scrollview嵌套listview下拉刷新的一些问题

    在Android开发中,ScrollView和ListView是两种常用的布局组件。ScrollView是一个可以包含单个直接子视图的滚动容器,而ListView则是一个可以展示多个相同类型的条目并且支持滚动的控件。当在一个ScrollView中嵌套一...

    ScrollView不冲突嵌套ListView

    在Android开发中,ScrollView和ListView是两种常用的布局控件,分别用于实现滚动视图和可滚动列表。然而,直接在ScrollView内嵌套ListView时,可能会出现一些问题,比如滚动冲突,导致用户体验不佳。本篇文章将深入...

    Android解决ListView嵌套ScrollView不能刷新

    在Android开发中,ListView是一个非常常用的组件,它用于展示大量数据列表,具有高效的滚动性能和自动回收机制。然而,当ListView需要与ScrollView嵌套使用时,可能会遇到一些问题,特别是不能正常刷新。本文将深入...

    listview在scrollview中完整显示

    在Android开发中,ListView是一种常用的控件,用于展示大量数据并支持滚动。然而,当它被嵌套在ScrollView中时,通常会出现一些问题,比如滚动冲突或者ListView无法完整显示。这是因为ScrollView本身就是一个可滚动...

    Android:ScrollView中嵌套ViewPager和ListView示例

    在Android开发中,有时我们需要在一个布局中展示大量的内容,这时我们可能会使用到ScrollView。ScrollView是一个可以垂直滚动的容器,它可以包含一个直接子视图,并确保该子视图完全可见。然而,当我们在ScrollView...

    android ScrollView嵌套ListView,并且实现动态添加ListView里的Item

    在Android开发中,ScrollView和ListView都是非常常见的控件。ScrollView是一个可滚动的视图容器,它可以包含一个或多个视图,并允许用户上下滑动查看内容。而ListView则是一个用于展示长列表的视图,通常用于显示...

    解决Android中ListView和ScrollView嵌套冲突

    在Android开发中,ListView和ScrollView是两种常用的布局控件。ListView用于展示大量可滚动的数据,而ScrollView则可以包裹任意数量的子视图并提供垂直滚动功能。然而,当ListView被放置在ScrollView内时,两者之间...

    Android下拉刷新控件(ListView好ScrollView版)_Android.rar

    在Android应用开发中,下拉刷新功能已经成为许多应用的标准特性,尤其在列表视图(ListView)和滚动视图(ScrollView)中更为常见。这个压缩包文件"Android下拉刷新控件(ListView好ScrollView版)_Android.rar"显然是...

    listview_scrollview动态改变Headview

    在Android开发中,ListView和ScrollView是两种常用的布局控件,分别用于展示可滚动的列表视图和可滚动的内容视图。本主题将深入探讨如何在ListView或ScrollView中动态改变Headerview的透明度以及实现显示或隐藏的...

    Android下拉刷新控件(ListView好ScrollView版).7z

    在Android开发中,下拉刷新功能是用户界面中不可或缺的一部分,尤其在列表视图(ListView)和滚动视图(ScrollView)中更为常见。这个压缩包文件"Android下拉刷新控件(ListView好ScrollView版).7z"显然是包含了实现这...

    弹性拉伸Scrollview、scrollview嵌套listview和scrollview滑动监听demo

    在Android开发中,ScrollView是一种常用的布局控件,用于允许用户滚动查看超过屏幕大小的内容。本文将深入探讨如何实现“弹性拉伸”的ScrollView、在ScrollView中嵌套ListView以及添加ScrollView的滑动监听。这些...

    Android下拉刷新控件(ListView好ScrollView版).rar

    这个“Android下拉刷新控件(ListView好ScrollView版)”压缩包文件包含的是关于如何在Android中实现这种功能的具体资料,主要集中在ListView和ScrollView这两种常见的滚动视图上。 1. **下拉刷新概念** 下拉刷新...

Global site tag (gtag.js) - Google Analytics