Android之ActivityGroup實(shí)現(xiàn)Tab分頁(yè)標(biāo)簽
點(diǎn)擊:1907
A+ A-
所屬頻道:新聞中心
很多客戶端軟件和瀏覽器軟件都喜歡用Tab分頁(yè)標(biāo)簽來(lái)管理內(nèi)容,除了可以用TabHost控件,還可以用ImageButton + ActivityGroup實(shí)現(xiàn)Tab分頁(yè)標(biāo)簽。使用ImageButton + ActivityGroup實(shí)現(xiàn)Tab分頁(yè)標(biāo)簽,主要是把一個(gè)Sub Activity(子Activity)的Window作為View添加到ActivityGroup所指定的容器中,本文使用LinearLayout作為容器裝載Sub Activity。
接下來(lái)貼出本例運(yùn)行的效果圖:
以下是切換時(shí)Sub Activity的生存周期的狀態(tài)變化:
從subActivity1切換到subActivity2的時(shí)候,會(huì)徹底釋放subActivity1的資源。
主Activity的main.xml的源碼如下:
view plaincopy to clipboardprint?
《?xml version=“1.0” encoding=“utf-8”?》
《LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:orientation=“vertical” android:layout_width=“fill_parent”
android:layout_height=“fill_parent”》
《LinearLayout android:id=“@+id/LinearLayout01”
android:layout_height=“wrap_content” android:layout_width=“fill_parent”》
《ImageButton android:layout_width=“wrap_content”
android:layout_height=“wrap_content” android:id=“@+id/ibtnTab1”
android:background=“@drawable/png1298”》《/ImageButton》
《ImageButton android:layout_width=“wrap_content”
android:layout_height=“wrap_content” android:id=“@+id/ibtnTab2”
android:background=“@drawable/png1292”》《/ImageButton》
《/LinearLayout》
《LinearLayout android:id=“@+id/LinearLayout02”
android:layout_width=“fill_parent” android:layout_height=“fill_parent”》《/LinearLayout》
《/LinearLayout》
《?xml version=“1.0” encoding=“utf-8”?》
《LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:orientation=“vertical” android:layout_width=“fill_parent”
android:layout_height=“fill_parent”》
《LinearLayout android:id=“@+id/LinearLayout01”
android:layout_height=“wrap_content” android:layout_width=“fill_parent”》
《ImageButton android:layout_width=“wrap_content”
android:layout_height=“wrap_content” android:id=“@+id/ibtnTab1”
android:background=“@drawable/png1298”》《/ImageButton》
《ImageButton android:layout_width=“wrap_content”
android:layout_height=“wrap_content” android:id=“@+id/ibtnTab2”
android:background=“@drawable/png1292”》《/ImageButton》
《/LinearLayout》
《LinearLayout android:id=“@+id/LinearLayout02”
android:layout_width=“fill_parent” android:layout_height=“fill_parent”》《/LinearLayout》
《/LinearLayout》
Sub Activity的XML源碼(listview.xml)如下:
view plaincopy to clipboardprint?
《?xml version=“1.0” encoding=“utf-8”?》
《LinearLayout android:id=“@+id/LinearLayout01”
xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“fill_parent” android:layout_height=“fill_parent”》
《ListView android:id=“@+id/MyListView” android:layout_width=“fill_parent”
android:layout_height=“fill_parent”》
《/ListView》
《/LinearLayout》
《?xml version=“1.0” encoding=“utf-8”?》
《LinearLayout android:id=“@+id/LinearLayout01”
xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“fill_parent” android:layout_height=“fill_parent”》
《ListView android:id=“@+id/MyListView” android:layout_width=“fill_parent”
android:layout_height=“fill_parent”》
《/ListView》
《/LinearLayout》
testActivityGroup.java源碼如下:
view plaincopy to clipboardprint?
package com.testActivityGroup;
import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
public class testActivityGroup extends ActivityGroup {
/** Called when the activity is first created. */
LinearLayout container;//裝載sub Activity的容器
ImageButton ibtnTab1,ibtnTab2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
container = (LinearLayout) findViewById(R.id.LinearLayout02);
ibtnTab1=(ImageButton)this.findViewById(R.id.ibtnTab1);
ibtnTab1.setOnClickListener(new ClickEvent());
ibtnTab2=(ImageButton)this.findViewById(R.id.ibtnTab2);
ibtnTab2.setOnClickListener(new ClickEvent());
}
class ClickEvent implements View.OnClickListener{
@Override
public void onClick(View v) {
container.removeAllViews();
Intent intent=new Intent(testActivityGroup.this, subActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
String[] str=new String[12];
if(v==ibtnTab1)
{
for(int i=0;i《str.length;i++)
str[i]=“單選”+String.valueOf(i);
intent.putExtra(“Name”, “subActivity1”);
intent.putExtra(“Strings”, str);
intent.putExtra(“ChoiceMode”, ListView.CHOICE_MODE_SINGLE);//通過(guò)參數(shù)設(shè)置列表式樣
}
else if(v==ibtnTab2)
{
for(int i=0;i《str.length;i++)
str[i]=“復(fù)選”+String.valueOf(i);
intent.putExtra(“Name”, “subActivity2”);
intent.putExtra(“Strings”, str);
intent.putExtra(“ChoiceMode”, ListView.CHOICE_MODE_MULTIPLE);//通過(guò)參數(shù)設(shè)置列表式樣
}
Window subActivity=getLocalActivityManager().startActivity(“subActivity”,intent);
container.addView(subActivity.getDecorView());
}
}
}
package com.testActivityGroup;
import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
public class testActivityGroup extends ActivityGroup {
/** Called when the activity is first created. */
LinearLayout container;//裝載sub Activity的容器
ImageButton ibtnTab1,ibtnTab2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
container = (LinearLayout) findViewById(R.id.LinearLayout02);
ibtnTab1=(ImageButton)this.findViewById(R.id.ibtnTab1);
ibtnTab1.setOnClickListener(new ClickEvent());
ibtnTab2=(ImageButton)this.findViewById(R.id.ibtnTab2);
ibtnTab2.setOnClickListener(new ClickEvent());
}
class ClickEvent implements View.OnClickListener{
@Override
public void onClick(View v) {
container.removeAllViews();
Intent intent=new Intent(testActivityGroup.this, subActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
String[] str=new String[12];
if(v==ibtnTab1)
{
for(int i=0;i《str.length;i++)
str[i]=“單選”+String.valueOf(i);
intent.putExtra(“Name”, “subActivity1”);
intent.putExtra(“Strings”, str);
intent.putExtra(“ChoiceMode”, ListView.CHOICE_MODE_SINGLE);//通過(guò)參數(shù)設(shè)置列表式樣
}
else if(v==ibtnTab2)
{
for(int i=0;i《str.length;i++)
str[i]=“復(fù)選”+String.valueOf(i);
intent.putExtra(“Name”, “subActivity2”);
intent.putExtra(“Strings”, str);
intent.putExtra(“ChoiceMode”, ListView.CHOICE_MODE_MULTIPLE);//通過(guò)參數(shù)設(shè)置列表式樣
}
Window subActivity=getLocalActivityManager().startActivity(“subActivity”,intent);
container.addView(subActivity.getDecorView());
}
}
}
subActivity.java源碼如下:
view plaincopy to clipboardprint?
package com.testActivityGroup;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class subActivity extends Activity {
String name;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
// 讀取列表內(nèi)容
name = this.getIntent().getStringExtra(“Name”);
String[] str = this.getIntent().getStringArrayExtra(“Strings”);
int choiceMode = this.getIntent().getIntExtra(“ChoiceMode”,
ListView.CHOICE_MODE_NONE);
ListView listView = (ListView) findViewById(R.id.MyListView);
// 設(shè)置列表的式樣
int itemID = android.R.layout.simple_list_item_1;
if (choiceMode == ListView.CHOICE_MODE_MULTIPLE)// 主Activity要求多選
itemID = android.R.layout.simple_list_item_multiple_choice;
else if (choiceMode == ListView.CHOICE_MODE_SINGLE)// 主Activity要求單選
itemID = android.R.layout.simple_list_item_single_choice;
ArrayAdapter《String》 arrayAdapter = new ArrayAdapter《String》(this,
itemID, str);
listView.setAdapter(arrayAdapter);
listView.setChoiceMode(choiceMode);
Log.e(name, “onCreate”);// 顯示當(dāng)前狀態(tài),onCreate與onDestroy對(duì)應(yīng)
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e(name, “onDestroy”);// 顯示當(dāng)前狀態(tài),onCreate與onDestroy對(duì)應(yīng)
}
@Override
public void onStart() {
super.onStart();
Log.e(name, “onStart”);// 顯示當(dāng)前狀態(tài),onStart與onStop對(duì)應(yīng)
}
@Override
public void onStop() {
super.onStop();
Log.e(name, “onStop”);// 顯示當(dāng)前狀態(tài),onStart與onStop對(duì)應(yīng)
}
@Override
public void onRestart() {
super.onRestart();
Log.e(name, “onRestart”);
}
@Override
public void onResume() {
super.onResume();
Log.e(name, “onResume”);// 顯示當(dāng)前狀態(tài),onPause與onResume對(duì)應(yīng)
}
@Override
public void onPause() {
super.onResume();
Log.e(name, “onPause”);// 顯示當(dāng)前狀態(tài),onPause與onResume對(duì)應(yīng)
}
}
(審核編輯: 智匯小新)