标签: fragment-tab-host

将一个片段替换为TabHost中的另一个片段

我正在创建一个包含每个片段的五个选项卡.我在第一个选项卡和ListView中使用ListView OnItemClickListener我想从第一个Tab片段替换为第二个选项卡Fragment.我怎么能用FragmentTabHost?我扩展Fragment了主类和所有片段类.我不是延伸FragmentActivity.那么如何将标签从一个片段更改为另一个片段呢?

MainClass:

public class TabsFragment extends Fragment implements OnTabChangeListener {

    private View mRoot;
    public TabHost mTabHost;
    private int mCurrentTab;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        mRoot = inflater.inflate(R.layout.tabs_fragment, null);
        mTabHost = (TabHost) mRoot.findViewById(android.R.id.tabhost);
        setupTabs();
        return mRoot;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setRetainInstance(true);

        mTabHost.setOnTabChangedListener(this);
        mTabHost.setCurrentTab(mCurrentTab);
        // manually start loading stuff in the first tab
        updateTab("1");
    } …
Run Code Online (Sandbox Code Playgroud)

android android-tabhost android-fragments fragment-tab-host

7
推荐指数
1
解决办法
2万
查看次数

如何在应用程序中维护片段的状态

如何在FragmentTabHost中显示片段的状态?

感谢本教程,我能够FragmentTabHost在我的应用程序中实现.

我的目的是创建一个应用程序,其主要活动包含一些选项卡(在整个应用程序的顶部).单击每个选项卡将在选项卡下方打开一个新片段.

问题是当我单击选项卡时执行某些操作,然后转到另一个选项卡,该选项卡将打开一个新的片段,然后返回到第一个选项卡 - 此处的更改不会保留.

流:

在此输入图像描述

我真的需要实现这个逻辑.如果我的方法有误,请建议替代方案.

谢谢

码:

主要活动

public class FagTabHostMain extends FragmentActivity {
    FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fag_tab_host_main);

        mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("audio").setIndicator("Audio"),
                AudioContainerFragmentClass.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("video").setIndicator("Video"),
                VideoContainerFragmentClass.class, null);

    }

    @Override
    public void onBackPressed() {
        boolean isPopFragment = false;
        String currentTabTag = mTabHost.getCurrentTabTag();
        if (currentTabTag.equals("audio")) {
            isPopFragment = ((AudioContainerFragmentClass) getSupportFragmentManager()
                    .findFragmentByTag("audio")).popFragment();
        } else if (currentTabTag.equals("video")) {
            isPopFragment = ((VideoContainerFragmentClass) getSupportFragmentManager()
                    .findFragmentByTag("video")).popFragment();
        }
        // Finish when …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments fragment-tab-host

7
推荐指数
1
解决办法
4073
查看次数

Android:将参数传递给选项卡

在我的Android应用中,我使用以下代码创建标签:

mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
            MyFragment.class, null);
Run Code Online (Sandbox Code Playgroud)

在该addTab方法中,第三个参数是Bundle对象并且是null.我可以使用第三个参数将参数传递给我的片段吗?

android API文档为空addTab,并不记录此参数.

android fragment-tab-host

6
推荐指数
1
解决办法
6657
查看次数

片段选项卡主机错误:呈现期间引发异常:没有标记为null的选项卡

我已经使用片段标签主机一段时间了,它工作正常.突然间我得到了这个布局编译错误.

Exception raised during rendering: No tab known for tag null
Run Code Online (Sandbox Code Playgroud)

activity_tabhost_search.xml:

<android.support.v4.app.FragmentTabHost 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:orientation="horizontal" />

     <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

</android.support.v4.app.FragmentTabHost>
Run Code Online (Sandbox Code Playgroud)

请不要将它关闭,因为我检查了所有线程,但我无法解决这个问题.

android android-fragments fragment-tab-host

6
推荐指数
1
解决办法
5137
查看次数

如何在FragmentTabHost中获取当前选定的片段

有一些与此问题相关的问题.例如,这一个.但它不起作用.

让我展示一下我在代码中所做的事情.

activity_main.xml中

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container"
    android:layout_width="match_parent" android:layout_height="match_parent"
    tools:context=".MainActivity" tools:ignore="MergeRootFrame" >

    <fragment
        android:id="@+id/my_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.zhouhao.test.MyFragment"
        tools:layout="@layout/fragment_my" />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

fragment_my.xml(我的主要片段包含FragmentTabHost)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="100"
        android:orientation="horizontal">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="95"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <FrameLayout
                android:id="@+id/panel_content"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1" />
        </LinearLayout>
    </LinearLayout>
</android.support.v4.app.FragmentTabHost>
Run Code Online (Sandbox Code Playgroud)

fragment_tab1.xml(对于与不同选项卡对应的片段,它们类似,所以我只显示一个代码)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.zhouhao.test.TabFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView android:layout_width="match_parent" android:layout_height="match_parent"
        android:text="@string/fragment_tab1" />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

MainActivity.java

protected …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragment-tab-host

6
推荐指数
1
解决办法
6248
查看次数

findFragmentByTag - 在FragmentTabHost中查找片段 - 始终为null

我无法获得指向Fragment的指针,Fragment是FragmentTabhost中当前可见的片段.

我有一个SherlockFragmentActivity调用SecondActivity,从它的onCreate方法加载Tabhost 像这样:

if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
    Fragment f = new TabsFragment();

    getSupportFragmentManager().beginTransaction().add(android.R.id.content, f, "tabsfragment").commit();
}
Run Code Online (Sandbox Code Playgroud)

TabsFragmentSherlockFragment使用此onCreate方法创建选项卡的子类

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.layout.tabs);

        mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("Offers",
                getResources().getDrawable(R.drawable.offersale)),
                OfferListFragment.class,
                null);

        mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("News",
                getResources().getDrawable(R.drawable.newspaper)),
                NewsFragment.class,
                null);

        return mTabHost;

    }
Run Code Online (Sandbox Code Playgroud)

现在当我在第二个选项卡中时,我在一个由原始活动启动的类中完成了后台任务SecondActivity,然后我调用它应该给我一个对该选项卡的引用,但它总是返回null!

NewsFragment newsView = (NewsFragment) delegate.getSupportFragmentManager().findFragmentByTag("Tab2");

delegate变量是一个指针回SecondActivity当它启动后台类.

如何获得指向选项卡片段的指针?我错了,添加标签时设置的"Tab2"是Tag片段吗?

android android-tabhost actionbarsherlock fragment-tab-host

5
推荐指数
1
解决办法
8615
查看次数

片段在另一个片段上重叠

我知道SO有关问题的帖子有各种各样的问题,但没有一个问题能为我提供解决方案.我有4个标签fragment activity,每个标签都有自己的标签fragment.我要进入另一个fragment里面.当我切换到标签时,它有时会重叠并且两者都可见.

这是代码(xml):

<Button
    android:id="@+id/checkBal"
    android:layout_width="fill_parent"
    android:layout_height="45dp"
    android:clickable="false"
    android:gravity="left|center_vertical"
    android:typeface="serif" />

<View
    android:layout_width="fill_parent"
    android:layout_height="2dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_marginTop="2dp"
    android:background="@color/green" />

<FrameLayout
    android:id="@+id/realtabcontent"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1" />

<android.support.v4.app.FragmentTabHost
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="0" />
</android.support.v4.app.FragmentTabHost>
Run Code Online (Sandbox Code Playgroud)

public class Tab_Activity extends FragmentActivity {

FragmentTabHost mHost;
Button balance;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabs);

    balance = (Button) findViewById(R.id.checkBal);
    mHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
    mHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

    mHost.addTab(mHost.newTabSpec("Home").setIndicator("Home"), …
Run Code Online (Sandbox Code Playgroud)

android fragment fragment-tab-host

5
推荐指数
1
解决办法
1195
查看次数

标签和图标是否在TabHost TabSpec setIndicator中互斥?

在Android应用程序(min sdk 11,target sdk 18)上,扩展Fragment的类应该创建带有一个标签和一个图标的TabHost选项卡(TabSpec).但...

TabSpec ts1;
// if the label is set to "Home", the label is displayed but not the image
ts1 = tab_host.newTabSpec("TAB_ONE").setIndicator("Home", getActivity().getResources().getDrawable(R.drawable.ic_tabone)).setContent(R.id.edit_species_tab);

// if the label is null or empty, the image is displayed
ts1 = tab_host.newTabSpec("TAB_ONE").setIndicator(null, getActivity().getResources().getDrawable(R.drawable.ic_tabone)).setContent(R.id.edit_species_tab);
Run Code Online (Sandbox Code Playgroud)

据我所知,文档没有提到标签和图标是互斥的.

起初我以为标签有一个固定的背景颜色隐藏图标,但事实并非如此.事实上,当我设置TabHost背景时,我可以看到标签是透明的:

tab_host.getTabWidget().setBackgroundResource(R.drawable.ic_mybackground);
Run Code Online (Sandbox Code Playgroud)

如何设置TabSpec背景,以便为每个选项卡显示标签图标?

tab_host.xml

<TabWidget
    android:id="@android:id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />

<FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="65dp" >

    <LinearLayout
        android:id="@+id/edit_species_tab"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/edit_regions_tab"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >
    </LinearLayout> …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-tabhost android-drawable fragment-tab-host

5
推荐指数
1
解决办法
4400
查看次数

将FragmentTabHost与ViewPager一起使用

我想创建使用刷卡标签界面FragmentTabHostViewPager.到目前为止,我得到了碎片滑动.唯一发生的事情是碎片能够在标签后面滑动,这些标签被禁用/卡住而不能正常工作.如何使FragmentTabHost选项卡与ViewPager配合使用以在选项卡之间滑动?

我尝试使用没有viewpager的FragmentTabHost,它工作正常,但它只是不使用viewpager.

这是它的样子截图: 在此输入图像描述

主要Java源代码:

import java.util.List;
import java.util.Vector;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.view.ViewPager;



public class MainActivity extends FragmentActivity {
 private FragmentTabHost mTabHost;
 private ViewPager pager;
 private MyPagerAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);

        pager = (ViewPager) findViewById(R.id.viewpager);                                   
        List<Fragment> fragments = new Vector<Fragment>();
        fragments.add(Fragment.instantiate(this, BatteryFragment.class.getName()));
        fragments.add(Fragment.instantiate(this, DeviceFragment.class.getName()));
        fragments.add(Fragment.instantiate(this, NetworkFragment.class.getName()));         
        adapter = new MyPagerAdapter(getSupportFragmentManager(),       fragments);

        pager.setAdapter(adapter);

        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("battery").setIndicator("Battery",
                getResources().getDrawable(R.drawable.ic_battery_tab)), …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-fragmentactivity fragment-tab-host

5
推荐指数
1
解决办法
3373
查看次数

Android TabHost 透明背景并显示在列表下方

我搜索了很多关于这个问题并应用了这些解决方案,但没有成功。我需要将透明度应用于 FragmentTabHost 并显示该 TabHost 下的任何内容。

我还对所有五个选项卡 1 x 1 应用了透明颜色,但这并没有影响。提前致谢。

XML 代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/transparent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/homeToolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/red">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/toolbar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="@string/home"
                android:textColor="#ffffff"
                android:textStyle="normal" />


        </RelativeLayout>

    </android.support.v7.widget.Toolbar>

    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

    <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:background="@color/transparent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:background="@drawable/tab_background"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </android.support.v4.app.FragmentTabHost>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android android-layout fragment-tab-host

5
推荐指数
0
解决办法
402
查看次数