天天看點

[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");
        }
}