1. 程式人生 > >[Android UI介面] tab_Host頁面跳轉,傳值,重新整理等問題彙總。

[Android UI介面] tab_Host頁面跳轉,傳值,重新整理等問題彙總。

之前做了一個專案是關於Tab_Host的,現在完成了恰逢閒餘寫份總結,主要涉及裡面遇到問題以及解決方案的。
(首先說明這份程式碼是在eoe 下載的,這裡感謝分享的那位朋友,限於我的工程是公司的不能拿出來了,只能那這份原來的程式碼進行修改貼出來,歡迎拍磚);

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

public
class TabTest extends TabActivity{ private RadioGroup group; private TabHost tabHost; public static final String TAB_HOME="tabHome"; public static final String TAB_MES="tabMes"; public static final String TAB_TOUCH="tab_touch"; @Override protected
void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.maintabs); group = (RadioGroup)findViewById(R.id.main_radio); tabHost = getTabHost(); tabHost.addTab(tabHost.newTabSpec(TAB_HOME) .setIndicator(TAB_HOME) .setContent(new
Intent(this,Main.class))); tabHost.addTab(tabHost.newTabSpec(TAB_MES) .setIndicator(TAB_MES) .setContent(new Intent(this,Main2.class))); tabHost.addTab(tabHost.newTabSpec(TAB_TOUCH) .setIndicator(TAB_TOUCH) .setContent(new Intent(this,TouchTest.class))); group.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.radio_button0: tabHost.setCurrentTabByTag(TAB_HOME); break; case R.id.radio_button1: tabHost.setCurrentTabByTag(TAB_MES); break; case R.id.radio_button2: tabHost.setCurrentTabByTag(TAB_TOUCH); break; default: break; } } }); } }

效果如如下:
首先解決tab_host 的actitvty的跳轉重新整理,
public void onCheckedChanged()方法進行group監控點選不同的事件響應,但是也只有點選不同的事件才會響應,這樣問題就來了:比如同一個actitvty進行 頁面的縮放的的按鈕就沒有辦法響應了。這裡我是進行group立面的每一個RadioButton進行事件的處理 RadioButton.setOnClickListener().有人會說,不同的頁面一旦顯示一次當再次顯示就不在重新整理了,那麼你可以這樣設定一下頁面的跳轉:

tabHost.addTab(tabHost
                                        .newTabSpec(TAB_NEXT)
                                        .setIndicator(TAB_NEXT)
                                        .setContent(
                                                        new Intent(new Intent(this, DrawReportActivity.class))
                                                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
));

看看和上面程式碼有何不同,不錯就是這裡: .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)//就是這裡起作用

下面解決進行頁面傳值的問題:
首先進行tab_host 向各個頁面的傳值:這個和普通的傳值一樣沒有區別,

Intent intent_main = new Intent(this, DrawReportActivity.class);
                        Bundle bundle = new Bundle();
                        bundle.putInt("page", 1);
                        intent_main.putExtras(bundle);
                        tabHost.addTab(tabHost
                                        .newTabSpec(TAB_LAST)
                                        .setIndicator(TAB_LAST)
                                        .setContent(
                                                        new Intent(intent_main)
                                                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));

在相應的DrawReportActivity獲取這個資料就可以
其次進行不同actitvty 之間傳值的說明:

比如在A.actitvty要求跳轉到B.actitvty裡面,這裡這樣進行的跳轉:
TabTest.tabHost.setCurrentTabByTag(TabTest.TAB_LAST);
將上面程式碼裡面的tabHost進行靜態化,進行group的跳轉過去,這樣就顯示需要跳轉的頁面了,傳值呢?傳值在這裡可以採取進行廣播的方法:
傳送廣播:

Intent it = new Intent(action1);
                it.putExtra("url", et.getText().toString()); 
                sendBroadcast(it);

在註冊Androidmanifest.xml進行宣告:

<receiver android:name="com.raq.tab.Broadcastreceiver"> 
                <intent-filter> 
                <action android:name="Broadcast_page_num" /> 
                </intent-filter>
</receiver>

得到相應的廣播:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class Broadcastreceiver extends BroadcastReceiver {
        public String url;
        public void onReceive(Context context, Intent intent) {
                url = intent.getExtras().getString("url");
        }
}

進行傳值,我覺得如果資料不是很多的話,完全可以寫個靜態類,進行存放一些資料,
這樣跳轉actitvty類得到時候進行同時的資料存放就可以了。

最後奉上原始碼,隨時恭候拍磚!