Android how can i replace the deprecated tabhost?
Asked Answered
D

3

8

I'm going to create an application which is designed to use Tabhost, but as I know it's been deprecated. So my question is should I use Tabhost anyway or how can I replace it..by using buttons instead of them declared in every xml or any other suggestions?

Definitely answered 24/4, 2012 at 11:52 Comment(3)
Deprecated, even though you can use it. Don't you?Misadventure
i know but i was curious is there any better solution instead of tabhostDefinitely
TabHost is not deprecated, its TabActivity that has been deprecated in regards of FragmentTabHostBarramunda
N
12

"Deprecated" in Android means "we think there is a better solution that you should investigate". Rarely does "deprecated" mean "it is unusable". TabHost, AFAIK, works fine on Android 4.0.

That being said, I would recommend considering switching to tabs in the action bar, using ActionBarSherlock to give you backwards compatibility to Android 2.1.

UPDATE

Besides, TabHost is not deprecated. TabActivity is deprecated. You can still use TabHost, with views for your tabs. Or, use:

  • ViewPager with a tabbed indicator, like PagerTabStrip
  • FragmentTabHost, for a TabHost that uses fragments for tabs

The action bar also has tab support, but that was deprecated starting with the "L" Developer Preview.

Node answered 24/4, 2012 at 12:11 Comment(9)
I'm asking because I think I read somewhere that it's better to use fragments instead of tabhost.Definitely
@Bombastic: A common pattern of using tabs in the action bar is to have clicking a tab do a FragmentTransaction to replace a fragment on the screen. You do not have to use fragments to use tabs in the action bar, though.Node
Thanks for the answer! I guess I'll use ActionBarSherlock for my application : )Definitely
Is TabHost really deprecated? I think the TabActivity is deprecated. The whole tab mechanism is absolutely confusing. It would be nice if there could be one consistent mechanism supported by the ActionBar including the left/right flick. Does someone know suggested samples that implement it the way it should be? I have read through samples provided by the ActionBarSherlock library that use the above mentioned TabHost all over the place...Inflection
@and-dev: You are correct that TabHost itself is not deprecated -- I was not paying close enough attention with my answer and was following along with the phrasing used in the question. TabActivity is formally deprecated, mostly because ActivityGroup is deprecated, in favor of fragments. Tabs in the action bar, however, is still an alternative to using TabHost. My apologies for the confusion.Node
@Node Thank you for clearing up the confusion. Which one is the recommended way of implementing static tabs (like seen in the YouTube app or the ICS Dialer) that allow to slide/flick from the right to the left? (which is one of the suggested navigation mechanisms mentioned in the Android design guidelines)Inflection
@and-dev: Use a ViewPager for the body for the swiping behavior. In terms of the tabs, use the action bar (see ViewPager JavaDocs), or use a third-party implementation of "swipey tabs" like viewpagerindicator.com or github.com/astuetz/android-viewpagertabsNode
@Node One last question. Is it correct that the ActionBar tab mechanism is only able to work with Fragments or is there a possibility to switch between Activities as well? (it is mentioned right here developer.android.com/guide/topics/ui/actionbar.html#Tabs) Or is it recommended to use the tabs with Fragments only?Inflection
@and-dev: Activities-in-tabs is specifically what was deprecated (ActivityGroup).Node
S
3

As per Android API level-18, ActionBarSherlock is not recommended instead of that,they have introduced ActionBarCompat .. Better to go with ActionBarCompat.

Thank you.

Sombrous answered 8/8, 2013 at 7:49 Comment(0)
P
2

TabHost was deprecated in API level 30. You can use material TabLayout and ViewPager instead of TabHost:

<com.google.android.material.tabs.TabLayout
            android:id="@+id/tablayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="center"
            app:tabIndicatorColor="@color/colorPrimary"
            app:tabIndicatorHeight="2dp"
            app:tabMode="fixed"
            app:tabSelectedTextColor="@color/colorPrimary"
            app:tabTextAppearance="@style/MapTabTextStyle"
            app:tabTextColor="@color/black" />

code:

tablayout.addTab(tablayout.newTab().setText("Tab1"))
tablayout.addTab(tablayout.newTab().setText("Tab2"))
tablayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
        override fun onTabReselected(tab: TabLayout.Tab?) {

        }

        override fun onTabUnselected(tab: TabLayout.Tab?) {
            
        }

        override fun onTabSelected(tab: TabLayout.Tab?) {
            // do something
        }

    })
Procora answered 17/9, 2020 at 22:21 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.