Android学习4——ListActivity,TabActivity

原创内容,转载请注明出处

1、TabActivity

TabActivity是一个切换标签,可以同时装载多个标签。它的出现主要是为了解决手机屏幕过小,展现内容不够友好(注在Android4版本中已不推荐使用Tab来显示多个页面,推荐使用Frame来代替)。如下例子

 

1、将上个例子的FirstActivity.java类修改为SecondActivity.java名称,并将其对应的布局文件activity_first.xml修改为activity_second.xml。

2、将MainActivity.java类修改为FirstActivity.java名称,并将其对应的布局文件activity_main.xml修改为activity_first.xml。

 

3、创建一个MyTabActivity.java类和其对应布局文件activity_my_tab.xml。

 

布局文件activity_my_tab.xml,该文件必须以TabHost标记为根元素,其中TabWidget标记代表标签页,FrameLayout标记则代表标签页的内容,它们都使用Android自带的id名称。文件内容如下

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="5dp" />
    </LinearLayout>

</TabHost>

 

MyTabActivity继承了TabActivity类,并在onCreate方法里添加Tab标签页,如下代码将FirstActivity、SecondActivity分别添加为第一二个标签页。

package com.cygoat.myapp;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;

public class MyTabActivity extends TabActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_my_tab);
		// 获取tabHost,即整个Tab
		TabHost tabHost = getTabHost();
		// 创建Intent跳转对象
		Intent intent = new Intent();
		intent.setClass(this, FirstActivity.class);
		// 新建一个标签页
		TabHost.TabSpec spec = tabHost.newTabSpec("FirstActivity");
		// 设置标签名称,还可设置图片
		spec.setIndicator("第一个");
		// 设置Intent跳转对象
		spec.setContent(intent);
		// 添加标签页
		tabHost.addTab(spec);

		// 创建Intent跳转对象
		intent = new Intent();
		intent.setClass(this, SecondActivity.class);
		// 新建一个标签页
		spec = tabHost.newTabSpec("SecondActivity");
		// 设置标签名称,还可设置图片
		spec.setIndicator("第二个");
		// 设置Intent跳转对象
		spec.setContent(intent);
		// 添加标签页
		tabHost.addTab(spec);
	}
}

 

4.在AndroidManifest.xml文件中注册MyTabActivity,并将它设置为主启动Activity。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cygoat.myapp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".FirstActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_first"
            android:theme="@android:style/Theme.Dialog" >
        </activity>
        <activity
            android:name=".MyTabActivity"
            android:label="@string/title_activity_my_tab" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

5.运行结果如下

 
Android学习4——ListActivity,TabActivity
 
Android学习4——ListActivity,TabActivity
 

如上测试结果,成功将FirstActivity和SecondActivity都显示在同一个页面。同理,使用TabActivity还可添加多个Activity在该页面上。

 

2、ListActivity

ListActivity是一个很常见的Activity,它可以展示大量数据集(展现内容在ListView控件下,该类包含ListView控件),并且界面的展示效果可以由开发者来设计。故而在布局中需要加入ListView,并且id是Android框架已经定义好的id(android.R.id.list),除此还需要构建展现内容的数据集,数据集使用List<Map<>>集合来存储。最后将ListView和List<Map>数据集构建一个ListAdapter适配器对象,将该对象设入当前Activity中。

 

1.自定义构建展现内容布局文件list.xml,这里简单定义两个Textview标签。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />

</RelativeLayout>

 

2.修改上一个项目的activity_first.xml文件,在该布局文件添加ListView控件。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.cygoat.myapp.FirstActivity" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <EditText
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="@string/hello_world" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="sendMessage"
            android:text="@string/send_button" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <ListView
            android:id="@android:id/list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

 

3.修改FirstActivity类的onCreate方法。

        @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_first);
		System.out.println("-----mainActivity onCreate------");
		
		//创建ListView数据集
		List<Map<String, String>> list = new ArrayList<Map<String,String>>();
		for(int i=0;i<10;i++){
			Map<String, String> map = new HashMap<String, String>();
			map.put("name", "zhangsan"+i);
			map.put("age", Math.round((Math.random()*100))+"岁");
			list.add(map);
		}
		//创建ListAdapter适配器
		ListAdapter listAdapter = new SimpleAdapter(this,list,R.layout.list,new String[]{"name","age"},new int[]{R.id.name,R.id.age});
		//为Activity设置适配器
		setListAdapter(listAdapter);
	}

 

4.重写FirstActivity类的List选项单击事件方法onListItemClick,每当单击list选项时,弹出提示消息。

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		//获取选中项的数据
		Map<String, String> map = (Map<String, String>) l.getItemAtPosition(position);
		//显示选中项数据
		Toast.makeText(this, "名字"+map.get("name")+ " 年龄" +map.get("age"), Toast.LENGTH_SHORT).show();
	}

 

5.测试结果如下

 
Android学习4——ListActivity,TabActivity

 

如上完成了集合数据的展示和点击事件的监听
 

3、ListView

 ListView用来展现一系列集合数据,展现数据的界面风格可由开发者自定义。在上面的ListActivity类,其实就是使用ListView控件来展示集合数据,它是对Activity的一个封装类,该类中封装了ListView控件。下面将不使用ListActivity类,直接在Activity类中使用ListView控件来展示集合数据。

 

1.修改activity_second.xml布局文件,增加一个ListView控件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.cygoat.myapp.SecondActivity" >

    <TextView
        android:id="@+id/result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/result" />

</RelativeLayout>

 

2.修改SecondActivity类,在onCreate文件中为ListView控件添加集合数据,并为其添加选项点击监听器。

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		//获取Intent跳转对象
		Intent intent = getIntent();
		//获取接收消息
		String message = intent.getStringExtra("message");
		TextView textView = (TextView) findViewById(R.id.result);
		//显示接收的消息内容在标签上
		textView.setText("内容为:"+message);
		System.out.println("-----FirstActivity onCreate------");
		
		ListView listView = (ListView) findViewById(R.id.list);
		//创建ListView数据集
		List<Map<String, String>> list = new ArrayList<Map<String,String>>();
		for(int i=0;i<10;i++){
			Map<String, String> map = new HashMap<String, String>();
			map.put("name", "zhangsan"+i);
			map.put("age", Math.round((Math.random()*100))+"岁");
			list.add(map);
		}
		//创建ListAdapter适配器
		ListAdapter listAdapter = new SimpleAdapter(this,list,R.layout.list,new String[]{"name","age"},new int[]{R.id.name,R.id.age});
		//为Activity设置适配器
		listView.setAdapter(listAdapter);
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				System.out.println("");
				//获取选中项的数据
				Map<String, String> map = (Map<String, String>) parent.getItemAtPosition(position);
				//显示选中项数据
				Toast.makeText(SecondActivity.this, "名字"+map.get("name")+ " 年龄" +map.get("age"), Toast.LENGTH_SHORT).show();
			}
			
		});
	}

 

3.测试结果如下

 
Android学习4——ListActivity,TabActivity
 

如上测试结果,完成ListView的展示和点击事件监听。

 

源代码如下

你可能感兴趣的:(ListActivity)