Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将选项卡添加到一个片段_Android_Android Fragments_Tabs - Fatal编程技术网

Android 将选项卡添加到一个片段

Android 将选项卡添加到一个片段,android,android-fragments,tabs,Android,Android Fragments,Tabs,我正在尝试在我的应用程序中的一个片段中添加标签(该应用程序有几个片段)。我在兜圈子,想让这件事起作用。我从stackoverflow的答案中找到了一些建议,该答案被发布到了某人的问题中,但这会使我的应用程序崩溃 片段代码 公共类salesPartsHolderFragment扩展了片段{ public salesPartsHolderFragment() { // Required empty public constructor } @Override public View o

我正在尝试在我的应用程序中的一个片段中添加标签(该应用程序有几个片段)。我在兜圈子,想让这件事起作用。我从stackoverflow的答案中找到了一些建议,该答案被发布到了某人的问题中,但这会使我的应用程序崩溃

片段代码 公共类salesPartsHolderFragment扩展了片段{

public salesPartsHolderFragment() {
    // Required empty public constructor

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View theView = inflater.inflate(R.layout.fragment_sales_parts_holder, container, false);
    TabHost tabs=(TabHost)getActivity().findViewById(R.id.tabhost);

    tabs.setup();

    TabHost.TabSpec spec=tabs.newTabSpec("tag1");

    spec.setContent(R.id.tab1);//here you define which tab you want to setup
    spec.setIndicator("So Close");//here you choose the text showed in the tab
    tabs.addTab(spec);

    spec=tabs.newTabSpec("tag2");
    spec.setContent(R.id.tab2);
    spec.setIndicator("Contacts");
    tabs.addTab(spec);
    return theView;
}
}

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.alcontrol.atmis.anticimex.activities.salesPartsHolderFragment">

<TabHost
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/setting" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="46dp"
        />

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

        <TextView
            android:id="@+id/tab1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:textColor="@color/white"
            android:textAppearance="?android:attr/textAppearanceLarge" />


        <TextView
            android:id="@+id/tab2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:textAppearance="?android:attr/textAppearanceLarge"  />

    </FrameLayout>

</LinearLayout>
替换

TabHost tabs = (TabHost)getActivity().findViewById(R.id.tabhost);

试试这个。这会奏效的


调用
getActivity.findViewById()
onCreateView()
中不起作用,因为
片段的
视图
尚未由
onCreateView()

创建此项目的帮助。Google建议使用它而不是TabHost。

您必须创建一个选项卡活动,在该活动中您将添加片段。我希望下面的代码能够帮助您:

公共类TabActivity扩展了FragmentActivity{

private static TabHost mTabHost;

private TabSpec mTabSpec;

private final String TAG_First = "First";

private final String TAG_Second = "Second";

private final String TAG_Third = "Third";

private int mCurrentTab = 0;
private View mDecorView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_tab);

    mTabHost = (TabHost) findViewById(R.id.tabhost_lesson);
    mTabHost.setOnTabChangedListener(mTabChangeListener);
    mTabHost.setup();

    setupTabs();
}

private void setupTabs() {

    /*
     * Setup new tab
     */
    mTabSpec = mTabHost.newTabSpec(TAG_First);
    mTabHost.setCurrentTab(mCurrentTab);
    mTabSpec.setContent(new TabContentFactory() {

        @Override
        public View createTabContent(String tag) {

            return findViewById(android.R.id.tabcontent);
        }
    });

    mTabSpec.setIndicator(createTabContent(TAG_First, 14));

    mTabHost.addTab(mTabSpec);

    /*
     * Setup New Tab
     */
    mTabSpec = mTabHost.newTabSpec(TAG_Second);

    mTabSpec.setContent(new TabContentFactory() {

        @Override
        public View createTabContent(String tag) {

            return findViewById(android.R.id.tabcontent);
        }
    });

    mTabSpec.setIndicator(createTabContent(TAG_Second, 14));

    mTabHost.addTab(mTabSpec);

    mTabHost.getTabWidget().setDividerDrawable(null);

    /*
     * Setup New Tab
     */
    mTabSpec = mTabHost.newTabSpec(TAG_Third);

    mTabSpec.setContent(new TabContentFactory() {

        @Override
        public View createTabContent(String tag) {

            return findViewById(android.R.id.tabcontent);
        }
    });

    mTabSpec.setIndicator(createTabContent(TAG_Third, 14));

    mTabHost.addTab(mTabSpec);

}

/**
 * Method to Customize Tabs
 * 
 * @param String
 *            TabID
 * @param Drawable
 *            drawable
 * @param int TabTextSize
 * @return
 */
public View createTabContent(String mTabLbl, int mTxtSize) {

    View mTabView = LayoutInflater.from(TabActivity.this).inflate(
            R.layout.tabs_background, null);

    TextView mTabText = (TextView) mTabView.findViewById(R.id.tabsText);

    // mTabText.setBackgroundDrawable(mTabDraw);
    mTabText.setText(mTabLbl);

    return mTabView;
}

public static void SetCurrentTab(int CurrentTab) {
    mTabHost.setCurrentTab(CurrentTab);
}

TabHost.OnTabChangeListener mTabChangeListener = new OnTabChangeListener() {

    @Override
    public void onTabChanged(String tabId) {

        if (tabId.equals(TAG_First)) {

            mCurrentTab = 0;

            FirstFrag fFragment = new FirstFrag();

            addTabFragments(tabId, fFragment);

        } else if (tabId.equals(TAG_Second)) {

            mCurrentTab = 1;

            SecondFrag sFragment = new SecondFrag();

            addTabFragments(tabId, sFragment);

        } else if (tabId.equals(TAG_Third)) {

            mCurrentTab = 2;

            ThirdFrag tFragment = new ThirdFrag();

            addTabFragments(tabId, tFragment);

        }
    }
};

/**
 * Method to add Fragment When Switching Between Tabs
 * 
 * @param String
 *            Tag
 * @param Fragment
 *            TabFragment
 */
public void addTabFragments(String tag, Fragment mTabFrag) {

    FragmentManager mFragmentManager = getSupportFragmentManager();

    FragmentTransaction mFragmentTransaction = mFragmentManager
            .beginTransaction();

    mFragmentTransaction.replace(R.id.frame, mTabFrag);

    mFragmentTransaction.commit();
}

}

阅读有关使用FragmentTabHost的内容谢谢您的回复,我有一个维护活动,将所有具有工作流程的片段FragA传递到FragF,其中FragD是具有选项卡的片段。你是说我必须离开MainActivity进入TabActivity?你是想在一个片段中添加所有选项卡吗?是的,一个片段需要显示两个选项卡,然后在该片段中加载内容。我也在片段中测试了这段代码,效果很好。我有一个主要的活动叫做片段“tabFragment”。此选项卡片段有3个选项卡…您可以使用此链接中的我的代码。请发布LogCatHanks,我现在已添加了LogCatMainActivity的第244行中的logcatwhat??请同时提供您的
loadSalesPartsFragment()
方法代码我很抱歉,那里有一些多余的代码,我已经删除了,现在可以工作了:-)。非常高兴,再次感谢您的大力帮助,并为我节省了更多的黑客时间。
TabHost tabs = (TabHost)theView.findViewById(R.id.tabhost);
private static TabHost mTabHost;

private TabSpec mTabSpec;

private final String TAG_First = "First";

private final String TAG_Second = "Second";

private final String TAG_Third = "Third";

private int mCurrentTab = 0;
private View mDecorView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_tab);

    mTabHost = (TabHost) findViewById(R.id.tabhost_lesson);
    mTabHost.setOnTabChangedListener(mTabChangeListener);
    mTabHost.setup();

    setupTabs();
}

private void setupTabs() {

    /*
     * Setup new tab
     */
    mTabSpec = mTabHost.newTabSpec(TAG_First);
    mTabHost.setCurrentTab(mCurrentTab);
    mTabSpec.setContent(new TabContentFactory() {

        @Override
        public View createTabContent(String tag) {

            return findViewById(android.R.id.tabcontent);
        }
    });

    mTabSpec.setIndicator(createTabContent(TAG_First, 14));

    mTabHost.addTab(mTabSpec);

    /*
     * Setup New Tab
     */
    mTabSpec = mTabHost.newTabSpec(TAG_Second);

    mTabSpec.setContent(new TabContentFactory() {

        @Override
        public View createTabContent(String tag) {

            return findViewById(android.R.id.tabcontent);
        }
    });

    mTabSpec.setIndicator(createTabContent(TAG_Second, 14));

    mTabHost.addTab(mTabSpec);

    mTabHost.getTabWidget().setDividerDrawable(null);

    /*
     * Setup New Tab
     */
    mTabSpec = mTabHost.newTabSpec(TAG_Third);

    mTabSpec.setContent(new TabContentFactory() {

        @Override
        public View createTabContent(String tag) {

            return findViewById(android.R.id.tabcontent);
        }
    });

    mTabSpec.setIndicator(createTabContent(TAG_Third, 14));

    mTabHost.addTab(mTabSpec);

}

/**
 * Method to Customize Tabs
 * 
 * @param String
 *            TabID
 * @param Drawable
 *            drawable
 * @param int TabTextSize
 * @return
 */
public View createTabContent(String mTabLbl, int mTxtSize) {

    View mTabView = LayoutInflater.from(TabActivity.this).inflate(
            R.layout.tabs_background, null);

    TextView mTabText = (TextView) mTabView.findViewById(R.id.tabsText);

    // mTabText.setBackgroundDrawable(mTabDraw);
    mTabText.setText(mTabLbl);

    return mTabView;
}

public static void SetCurrentTab(int CurrentTab) {
    mTabHost.setCurrentTab(CurrentTab);
}

TabHost.OnTabChangeListener mTabChangeListener = new OnTabChangeListener() {

    @Override
    public void onTabChanged(String tabId) {

        if (tabId.equals(TAG_First)) {

            mCurrentTab = 0;

            FirstFrag fFragment = new FirstFrag();

            addTabFragments(tabId, fFragment);

        } else if (tabId.equals(TAG_Second)) {

            mCurrentTab = 1;

            SecondFrag sFragment = new SecondFrag();

            addTabFragments(tabId, sFragment);

        } else if (tabId.equals(TAG_Third)) {

            mCurrentTab = 2;

            ThirdFrag tFragment = new ThirdFrag();

            addTabFragments(tabId, tFragment);

        }
    }
};

/**
 * Method to add Fragment When Switching Between Tabs
 * 
 * @param String
 *            Tag
 * @param Fragment
 *            TabFragment
 */
public void addTabFragments(String tag, Fragment mTabFrag) {

    FragmentManager mFragmentManager = getSupportFragmentManager();

    FragmentTransaction mFragmentTransaction = mFragmentManager
            .beginTransaction();

    mFragmentTransaction.replace(R.id.frame, mTabFrag);

    mFragmentTransaction.commit();
}