添加标签内片段的Andr​​oid? [英] Adding Tab inside Fragment In Android?

查看:134
本文介绍了添加标签内片段的Andr​​oid?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想添加一个TabHost一个片段里。在code如下。在这里,片段中。我试图添加TabHost显示两个标签:

 包com.nordicsoft.dilosysNewVersion;

进口android.app.Fragment;
进口android.content.Intent;
进口android.os.Bundle;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.TabHost;

公共类Fragment_Coupons扩展片段{
    TabHost tabHost;
    TabHost.TabSpec规范;

    公共Fragment_Coupons(){
    }

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){

        查看rootView = inflater.inflate(R.layout.fragment_coupon,集装箱,
                假);
        tabHost =(TabHost)rootView.findViewById(android.R.id.tabhost);
        tabHost.setup();
        // Add_Text_To_Tab(机器人,IOS);

        意图int​​entAndroid =新意图()。setClass(getActivity()
                Aclass.class);
        规格= tabHost.newTabSpec(机器人)。setContent(intentAndroid)
                .setIndicator(机器人);

        tabHost.addTab(规范);

        。意图int​​entBus =新意图()setClass(getActivity(),Bclass.class);
        规格= tabHost.newTabSpec(欢迎)。setIndicator(欢迎)
                .setContent(intentBus).setIndicator(欢迎);
        tabHost.addTab(规范);
        返回rootView;
    }

}
 

中的XML code:

 < XML版本=1.0编码=UTF-8&GT?;
< TabHost的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@机器人:ID / tabhost
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT>
    <的LinearLayout
        机器人:方向=垂直
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =FILL_PARENT>
        < TabWidget
            机器人:ID =@机器人:ID /标签
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =WRAP_CONTENT/>
        <的FrameLayout
            机器人:ID =@机器人:ID / tabcontent
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =FILL_PARENT/>
    < / LinearLayout中>
< / TabHost>
 

这是给我的错误:

  12-09 17:40:53.509:E / AndroidRuntime(18103):致命异常:主要
12-09 17:40:53.509:E / AndroidRuntime(18103):java.lang.IllegalStateException:你忘了叫'公共无效设置(LocalActivityManager的ActivityGroup)?
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.widget.TabHost $ IntentContentStrategy.getContentView(TabHost.java:690)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.widget.TabHost.setCurrentTab(TabHost.java:356)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.widget.TabHost.addTab(TabHost.java:246)
12-09 17:40:53.509:E / AndroidRuntime(18103):在com.nordicsoft.dilosysNewVersion.Fragment_Coupons.onCreateView(Fragment_Coupons.java:32)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.app.BackStackRecord.run(BackStackRecord.java:622)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.app.FragmentManagerImpl $ 1.运行(FragmentManager.java:426)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.os.Handler.handleCallback(Handler.java:605)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.os.Handler.dispatchMessage(Handler.java:92)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.os.Looper.loop(Looper.java:137)
12-09 17:40:53.509:E / AndroidRuntime(18103):在android.app.ActivityThread.main(ActivityThread.java:4517)
12-09 17:40:53.509:E / AndroidRuntime(18103):在java.lang.reflect.Method.invokeNative(本机方法)
12-09 17:40:53.509:E / AndroidRuntime(18103):在java.lang.reflect.Method.invoke(Method.java:511)
12-09 17:40:53.509:E / AndroidRuntime(18103):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:993)
12-09 17:40:53.509:E / AndroidRuntime(18103):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
12-09 17:40:53.509:E / AndroidRuntime(18103):在dalvik.system.NativeStart.main(本机方法)
12-09 17:46:02.770:I /流程(18103):发送信号。 PID:18103 SIG:9
 

解决方案

试着做处理标签:

 公共类MainFragment扩展片段{
    私人FragmentTabHost mTab​​Host;

    //强制构造函数
    公共MainFragment(){
    }

    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

    }

    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){

        查看rootView = inflater.inflate(R.layout.fragment_tabs,集装箱,假);


        mTabHost =(FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
        mTabHost.setup(getActivity(),getChildFragmentManager(),R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec(fragmentb)。setIndicator(片段B),
                FragmentB.class,NULL);
        mTabHost.addTab(mTabHost.newTabSpec(fragmentc)。setIndicator(C片段),
                FragmentC.class,NULL);
        mTabHost.addTab(mTabHost.newTabSpec(fragmentd)。setIndicator(D片段),
                FragmentD.class,NULL);


        返回rootView;
    }
}
 

通过布局:

 < android.support.v4.app.FragmentTabHost
    的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@机器人:ID / tabhost
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

    <的LinearLayout
        机器人:方向=垂直
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent>

        <的FrameLayout
            机器人:ID =@ + ID / realtabcontent
            机器人:layout_width =match_parent
            机器人:layout_height =0dp
            机器人:layout_weight =1/>

    < / LinearLayout中>
< /android.support.v4.app.FragmentTabHost>
 

主办MainFragment的MotherActivity:

 公共类MotherActivity扩展FragmentActivity {

@覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);

        MainFragment fragmenttab =新MainFragment();
        getSupportFragmentManager()的BeginTransaction()
        。新增(R.id.item_detail_container,fragmenttab).commit();


    }
 

和MotherActivity布局:

 <的FrameLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:ID =@ + ID / item_detail_container
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
 />
 

在这个刚刚建立的正常片段B和C等类。 其结果将是:

I am trying to add a TabHost inside a Fragment. The code is given below. Here inside the Fragment. I am trying to add TabHost to show two Tabs:

package com.nordicsoft.dilosysNewVersion;

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;

public class Fragment_Coupons extends Fragment {
    TabHost tabHost;
    TabHost.TabSpec spec;

    public Fragment_Coupons() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_coupon, container,
                false);
        tabHost = (TabHost) rootView.findViewById(android.R.id.tabhost);
        tabHost.setup();
        //Add_Text_To_Tab("Android", "IOS");

        Intent intentAndroid = new Intent().setClass(getActivity(),
                Aclass.class);
        spec = tabHost.newTabSpec("Android").setContent(intentAndroid)
                .setIndicator("Android");

        tabHost.addTab(spec);

        Intent intentBus = new Intent().setClass(getActivity(), Bclass.class);
        spec = tabHost.newTabSpec("Welcome").setIndicator("Welcome")
                .setContent(intentBus).setIndicator("Welcome");
        tabHost.addTab(spec);
        return rootView;
    }

}

The XML code:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
    </LinearLayout>
</TabHost>

This Is giving me the error:

12-09 17:40:53.509: E/AndroidRuntime(18103): FATAL EXCEPTION: main
12-09 17:40:53.509: E/AndroidRuntime(18103): java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:690)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.widget.TabHost.setCurrentTab(TabHost.java:356)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.widget.TabHost.addTab(TabHost.java:246)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at com.nordicsoft.dilosysNewVersion.Fragment_Coupons.onCreateView(Fragment_Coupons.java:32)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.app.BackStackRecord.run(BackStackRecord.java:622)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.os.Handler.handleCallback(Handler.java:605)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.os.Looper.loop(Looper.java:137)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at android.app.ActivityThread.main(ActivityThread.java:4517)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at java.lang.reflect.Method.invokeNative(Native Method)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at java.lang.reflect.Method.invoke(Method.java:511)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
12-09 17:40:53.509: E/AndroidRuntime(18103):    at dalvik.system.NativeStart.main(Native Method)
12-09 17:46:02.770: I/Process(18103): Sending signal. PID: 18103 SIG: 9

解决方案

Try to do this to handle the Tabs:

public class MainFragment extends Fragment {
    private FragmentTabHost mTabHost;

    //Mandatory Constructor
    public MainFragment() {
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_tabs,container, false);


        mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Fragment B"),
                FragmentB.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Fragment C"),
                FragmentC.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("fragmentd").setIndicator("Fragment D"),
                FragmentD.class, null);


        return rootView;
    }
}

With the layout:

<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:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

    </LinearLayout>
</android.support.v4.app.FragmentTabHost>

The MotherActivity to host the MainFragment:

public class MotherActivity extends FragmentActivity {

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

        MainFragment fragmenttab = new MainFragment();
        getSupportFragmentManager().beginTransaction()
        .add(R.id.item_detail_container, fragmenttab).commit();


    }

And MotherActivity layout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/item_detail_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 />

After this just create the normal fragment B and C, etc Class. The Result will be:

这篇关于添加标签内片段的Andr​​oid?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆