activity-Android 的 Tab 不能正常运行

问题描述

Android 的 Tab 不能正常运行
在 TabActivity 有一个 TabHost,在 TabHost 中有两个选项卡,每个选项卡都有自己的intent。如果一个 tab 改变,在我检测之前,这个 intent 的 onResume()方法被销毁。如何解决这个问题呢?
TabActivity code:

public class TabHostActivity extends TabActivity {    static final int SHOW_SHARE_ACTIVITY = 0;    static final int SHOW_LOGIN_ACTIVITY = 1;    private TabHost tabHost;    private ImageButton composeImageButton;    private SharedPreferences prefs;    private Bundle b;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.tabhostactivity);               prefs = getSharedPreferences(Constants.PREFS_NAME 0);        //Setup the ActionBar        composeImageButton = (ImageButton) findViewById(R.id.composeImageButton);        composeImageButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if(prefs.getBoolean(""isLoggedIn"" false))                {                    showShareActivity();                }                else                {                    Intent intent = new Intent(TabHostActivity.this LoginActivity.class);                    startActivityForResult(intent SHOW_LOGIN_ACTIVITY);                }            }        });        b = new Bundle();        //Setup the Tabs        Resources res = getResources(); // Resource object to get Drawables        tabHost = getTabHost();  // The activity TabHost        tabHost.setOnTabChangedListener(new OnTabChangeListener() {               @Override              public void onTabChanged(String arg0) {                   if(tabHost.getCurrentTab() == 0) //Check if the Watchlist tab was clicked so we can prompt login                   {                        //Toast toast = Toast.makeText(getApplicationContext()TRENDING = YES"" Toast.LENGTH_SHORT);                        //toast.show();                        b.putBoolean(""isTrendingTab""true);                   }                   else                   {                       Toast toast = Toast.makeText(getApplicationContext()TRENDING = NO"" Toast.LENGTH_SHORT);                       toast.show();                       b.putBoolean(""isTrendingTab""false);                   }              }             });          TabHost.TabSpec spec;  // Resusable TabSpec for each tab        Intent intent;  // Reusable Intent for each tab        // Create an Intent to launch an Activity for the tab (to be reused)        intent = new Intent().setClass(this ARActivity.class);        intent.putExtras(b);        // Initialize a TabSpec for each tab and add it to the TabHost        spec = tabHost.newTabSpec(""trending"").setIndicator(""Trending""res.getDrawable(R.drawable.icon)).setContent(intent);        tabHost.addTab(spec);        // Do the same for the other tabs        intent = new Intent().setClass(this WatchlistActivity.class);        intent.putExtras(b);        spec = tabHost.newTabSpec(""watchlist"").setIndicator(""Watchlist""res.getDrawable(R.drawable.icon)).setContent(intent);        tabHost.addTab(spec);        tabHost.setCurrentTab(0);    }    private void showShareActivity()    {        Intent intent = new Intent(TabHostActivity.this ShareActivity.class);        startActivityForResult(intent SHOW_SHARE_ACTIVITY);    }    protected void onActivityResult(int requestCode int resultCode Intent data) {        if(requestCode == SHOW_LOGIN_ACTIVITY)        {            //Login was successful so lets show the compose box!            if (resultCode == RESULT_OK) {                showShareActivity();            }        }    }}

这是其中一个 activity 中intent里的 onResume 方法:

public void onResume()    {        super.onResume();        Bundle bundle = getIntent().getExtras();        if(bundle.getBoolean(""isTrendingTab""))        {            Toast toast = Toast.makeText(getApplicationContext()TRENDING!"" Toast.LENGTH_SHORT);            toast.show();        }        else        {            Toast toast = Toast.makeText(getApplicationContext()WATCHLIST!"" Toast.LENGTH_SHORT);            toast.show();        }    }

解决方案

你是想在 intent 上输出:b.putBoolean(""isTrendingTab""true); 或者 false。通过检测改变来开启。
这是错误的方法。更改事件总是会发生在活动启动后,你应该做的逻辑也不同。

解决方案二:
不需要使用 onTabChanged()

Intent intent = new Intent(action) // see notes below about ""action""    .setClass(this ARActivity.class)    .putExtra(""isTrendingTab"" true); TabHost.TabSpec spec = tabHost.newTabSpec(""trending"")    .setIndicator(""trending"" getResources().getDrawable(drawableId))    .setContent(intent);tabHost.addTab(spec);

在 onResume()方法中:

if (getIntent().getBooleanExtra(""isTrendingTab"" false)) {...
时间: 2024-11-08 23:18:49

activity-Android 的 Tab 不能正常运行的相关文章

Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)_Android

Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结.目前写了: 1.传统的ViewPager实现 2.FragmentManager+Fragment实现 3.ViewPager+FragmentPagerAdapter实现 4.TabPageIndicator+ViewPager+FragmentPagerAdapter 1.传统的ViewPager实现 主要就是ViewPager+ViewAdapter这个还是比较常见的,就不多说了 效果图: 代码: p

Android如何tab的内容里面实现手势滑动

问题描述 Android如何tab的内容里面实现手势滑动 Android如何tab的内容里面实现手势滑动,不是从一个tab标签滑到另一个tab,而是一个tab的内容下进行手势滑动. 就是手势滑动的时候,实现页面卡不动,页面卡内的内容实现翻页的效果! 解决方案 参考:http://blog.csdn.net/fancylovejava/article/details/21446321 解决方案二: 我是想手势滑动时候,实现页面卡不动,但页面里面的内容有翻页的效果. 解决方案三: [http://b

滑动-Android 切换tab时底部指示器的移动效果是如何实现的

问题描述 Android 切换tab时底部指示器的移动效果是如何实现的 大家好,有一些软件是这样的,切换tab时,下面的红色条会滑动过去,比如说点击了"朋友圈",红色条就从"专辑"下面滑动到"朋友圈",请问如何实现,给个思路也好,谢谢!!! 解决方案 底部条是一个图片mTabSelector,占整个宽度的四分之一每次切换的时候,整个layout的params就变 RelativeLayout.LayoutParams params = (Rela

android开发-Android入门 程序无法正常运行

问题描述 Android入门 程序无法正常运行 由于无法上传图片,请各位点击这个网页,问题是同样的.请各位帮帮忙!http://zhidao.baidu.com/question/552773197730127652.html 解决方案 不要把button的监听写在onCreate

Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)

Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结.目前写了: 1.传统的ViewPager实现 2.FragmentManager+Fragment实现 3.ViewPager+FragmentPagerAdapter实现 4.TabPageIndicator+ViewPager+FragmentPagerAdapter 1.传统的ViewPager实现 主要就是ViewPager+ViewAdapter这个还是比较常见的,就不多说了 效果图: 代码: p

自定义Android系统Tab样式

res/drawable/tab_indicator.xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:d

【Android】Activity的task相关

转自:http://blog.csdn.net/liuhe688/article/details/6761337 古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示子聿(yù)> 软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物.今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有所提升,仍需我们去实践,去实践. 今天我们来讲一下Activity的task相关内容. 上次我们讲到Ac

Android基础总结篇之三:Activity的task相关介绍_Android

本篇文章主要介绍了android基础总结篇之三:Activity的task相关,具有一定的参考价值,有需要的可以了解一下. 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大家介绍一下.task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity:默认情况下,一个Activity启动另一个Activity时,两个Activi

Android基础总结篇之三:Activity的task相关介绍

本篇文章主要介绍了android基础总结篇之三:Activity的task相关,具有一定的参考价值,有需要的可以了解一下. 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大家介绍一下.task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity:默认情况下,一个Activity启动另一个Activity时,两个Activi