android tabhost tab內多個activity的跳轉(包括返回)

來源:互聯網
上載者:User

最近看一網友部落格關於tabhost tab內多個activity的跳轉問題,覺得很適用,所以在此分享了...

1:先看:

2:先看tabhost的布局吧:main.xml

<br /><?xml version="1.0" encoding="utf-8"?><br /><tabhost xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res/com.javaeye.dengyin2000.android.riddles" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"></p><p> <linearlayout android:id="@+id/oouter" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"><br /> <!-- 其中如果不添加 android:layout_weight="1" 則選項卡將位於頂部--></p><p> <framelayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1"></p><p> <tabwidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content"><br /> </tabwidget><br /> </framelayout></linearlayout></p><p></tabhost></p><p>

3:其中有一個很重要的用於管理activity的類,AbstractActivityGroup,此類需要extends ActivityGroup,利用ActivityGroup來管理activity,在每次跳轉時將此view添加到一個list中,當返回時就remove掉一個view,此類的原創是IntelliJ IDEA在此就貼下這位大神的代碼咯:<br />package com.youpeng.stackactivity;</p><p>import android.app.ActivityGroup;<br />import android.os.Build;<br />import android.view.KeyEvent;<br />import android.view.View;</p><p>import java.util.List;</p><p>/**<br /> * Created by IntelliJ IDEA.<br /> * User: EDENYIN<br /> * Date: 12/1/10<br /> * Time: 3:10 PM<br /> * To change this template use File | Settings | File Templates.<br /> */<br />public abstract class AbstractActivityGroup extends ActivityGroup {</p><p> public List<view> viewHistory;</p><p> public void replaceContentView(View view) {<br /> viewHistory.add(view);<br /> setContentView(view);<br /> }</p><p> public void back() {<br /> if (!viewHistory.isEmpty()) {<br /> viewHistory.remove(viewHistory.get(viewHistory.size() - 1));<br /> if (viewHistory.isEmpty()) {<br /> finish();<br /> return;<br /> }<br /> setContentView(viewHistory.get(viewHistory.size() - 1));<br /> } else {<br /> finish();<br /> }<br /> }<br /> @Override<br /> public void onBackPressed() {<br /> back();<br /> }</p><p> @Override<br /> public boolean onKeyDown(int keyCode, KeyEvent event) {</p><p> if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.DONUT<br /> && keyCode == KeyEvent.KEYCODE_BACK<br /> && event.getRepeatCount() == 0) {<br /> // Take care of calling this method on earlier versions of<br /> // the platform where it doesn't exist.<br /> onBackPressed();<br /> return true;<br /> }</p><p> return super.onKeyDown(keyCode, event);<br /> }<br />}<br /></view>4:再來看下主activity stackActivity的代碼:extend TabActivity代碼如下:package com.youpeng.stackactivity;</p><p>import android.app.TabActivity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.widget.TabHost;</p><p>public class StackActivity extends TabActivity {</p><p>@Override<br />protected void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);</p><p>final TabHost tabHost = getTabHost();</p><p>tabHost.addTab(tabHost<br />.newTabSpec("browse")<br />.setIndicator("Browse",<br />getResources().getDrawable(R.drawable.ic_launcher))<br />.setContent(new Intent(this, BrowseGroup.class)));</p><p>tabHost.addTab(tabHost<br />.newTabSpec("favorite")<br />.setIndicator("Favorite",<br />getResources().getDrawable(R.drawable.ic_launcher))<br />.setContent(new Intent(this, FavGroup.class)));</p><p>tabHost.setCurrentTab(0);</p><p>}</p><p>}<br /> 5:再來看下最關鍵的兩個類分別是BrowseGroup.class和FavGroup.class,直接上代碼:package com.youpeng.stackactivity;</p><p>import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;</p><p>import java.util.ArrayList;</p><p>/**<br /> * Created by IntelliJ IDEA.<br /> * User: denny<br /> * Date: 10-12-9<br /> * Time: PM11:00<br /> * To change this template use File | Settings | File Templates.<br /> */<br />public class BrowseGroup extends AbstractActivityGroup{</p><p> public static BrowseGroup BROWSE_GROUP;</p><p> @Override<br /> protected void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);</p><p> viewHistory = new ArrayList<view>();<br /> BROWSE_GROUP = this;</p><p> View decorView = getLocalActivityManager().startActivity("first", new Intent(this, First.class)).getDecorView();<br /> replaceContentView(decorView);<br /> }<br />}<br /> </view>package com.youpeng.stackactivity;</p><p>import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;</p><p>import java.util.ArrayList;</p><p>/**<br /> * Created by IntelliJ IDEA.<br /> * User: denny<br /> * Date: 10-12-11<br /> * Time: PM9:28<br /> */<br />public class FavGroup extends AbstractActivityGroup{</p><p> public static FavGroup FAV_GROUP;</p><p> @Override<br /> protected void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> FAV_GROUP = this;</p><p> viewHistory = new ArrayList<view>();<br /> View favListView = getLocalActivityManager().startActivity("FavoriteJokes", new Intent(this, FavoriteJokes.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();<br /> viewHistory.add(favListView);<br /> setContentView(favListView);</p><p> }<br />}<br /> </view>我們在每個tab頁中有申請一個ArrayList,讓每一個tab頁所有的activity都添加到這個LIst中來,當需要返回時再從list中remove。6:再來看first
這個activity的跳轉,代碼如下:<br />package com.youpeng.stackactivity;</p><p>import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;</p><p>public class First extends Activity implements OnClickListener {</p><p>private Button back, next;</p><p>@Override<br />protected void onCreate(Bundle savedInstanceState) {<br />// TODO Auto-generated method stub<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.first);</p><p>back = (Button) findViewById(R.id.first_back);<br />back.setOnClickListener(this);<br />next = (Button) findViewById(R.id.first_next);<br />next.setOnClickListener(this);<br />}</p><p>@Override<br />public void onClick(View v) {<br />switch (v.getId()) {<br />case R.id.first_back:<br />BrowseGroup.BROWSE_GROUP.back();</p><p>break;<br />case R.id.first_next:</p><p>Intent intent = new Intent();<br /> intent.setClass(First.this, SecondActivity.class);</p><p> View decorView = BrowseGroup.BROWSE_GROUP.getLocalActivityManager().startActivity("Category joke list", intent).getDecorView();<br /> BrowseGroup.BROWSE_GROUP.replaceContentView(decorView);</p><p>break;</p><p>default:<br />break;<br />}</p><p>}</p><p>}<br />以及second activity的代碼如下:package com.youpeng.stackactivity;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;</p><p>public class SecondActivity extends Activity implements OnClickListener{</p><p>private Button back, next;</p><p>@Override<br />protected void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.second);</p><p>back = (Button) findViewById(R.id.second_back);<br />back.setOnClickListener(this);<br />next = (Button) findViewById(R.id.second_next);<br />next.setOnClickListener(this);</p><p>}</p><p>@Override<br />public void onClick(View v) {<br />// TODO Auto-generated method stub<br />switch (v.getId()) {<br />case R.id.second_back:<br />BrowseGroup.BROWSE_GROUP.back();</p><p>break;<br />case R.id.second_next:<br />break;</p><p>default:<br />break;<br />}</p><p>}</p><p>}<br /> 當返回時直接調用父類的back方法。

7:總結:每一個tab頁都有一個List來儲存activity,當每次跳轉及返回進都要對該list進行操作,本質上是通過ActivityGroup來對activity進行管理。

8:工程代碼地址如下:

http://download.csdn.net/detail/lzg08_08/5050003

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.