43

以下のコードを使用しましたが、グラフィカル レイアウトをレンダリングするものではありません。としてエラーを表示しますException raised during rendering: No tab known for tag null

どうすればこれを解決できますか?

<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="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />

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

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

7 に答える 7

8

これは、TabHost を初期化するために使用したコードであり、正常に動作します。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class DetailFragment extends Fragment {

    /**
     * Mandatory empty constructor for the fragment manager to instantiate the fragment (e.g. upon screen orientation changes).
     */
    public DetailFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // R.layout.fragment_tabs_pager contains the layout as specified in your question
        View rootView = inflater.inflate(R.layout.fragment_tabs_pager, container, false);

        // Initialise the tab-host
        FragmentTabHost mTabHost = (FragmentTabHost) rootView.findViewById(R.id.tabhost);
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);

        // Initialise this list somewhere with the content that should be displayed
        List<String> itemsToBeDisplayed;

        for (String subItem : itemsToBeDisplayed) {
            // Give along the name - you can use this to hand over an ID for example
            Bundle b = new Bundle();
            b.putString("TAB_ITEM_NAME", subItem);

            // Add a tab to the tabHost
            mTabHost.addTab(mTabHost.newTabSpec(subItem).setIndicator(subItem), YourContentFragment.class, b);
        }
        return rootView;
    }
}

/**
  * This class contains the actual content of a single tab  
  */
public class YourContentFragment extends Fragment {

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

        Bundle extras = getArguments();
        if (extras != null) {
            if (extras.containsKey("TAB_ITEM_NAME")) {
                String subItem = extras.getString("TAB_ITEM_NAME");
                // Do something with that string
            }
        }
    }
}
于 2013-07-11T12:03:42.750 に答える
5

この問題に遭遇し、調査しましたが、有効な解決策が見つかりませんでした。しかし、「FragmentTabHost#setup」の直後にタブを追加するとこの問題は発生しないことに気付きましたが、たとえば「AsyncTask#onPostExecute」でタブを追加すると、この問題が発生します。これはばかげているようですが、試してみました..それらに基づいて、解決策を見つけました:

「FragmentTabHost#setup」の直後に空のタブを追加してから、他のタブを任意の場所に追加して、このソリューションを試してみましたが、うまくいきました! 以下のレイアウトと部分的なコードを使用します。

<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">

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

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

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

</LinearLayout>

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
    TabHost.TabSpec tabSpec = mTabHost.newTabSpec("TAB_FIRST").setIndicator("First");

    mTabHost.addTab(tabSpec, FirstFragment.class, null);

    TabWidget tabWidget = mTabHost.getTabWidget();
    if (tabWidget != null) {
        View tabWidgetChild = tabWidget.getChildAt(0);
        if (tabWidgetChild != null) {
            tabWidgetChild.setVisibility(View.GONE);
        }
    }
}
于 2014-03-04T15:53:15.983 に答える
3

フラグメントで tabHost を使用すると同様の問題が発生し、多くの検索を行い、最終的にその解決策を見つけました。

1) ビューの作成時にコードを保持する

2)これが鍵です->タブインジケーターのレイアウトを膨らませている間、次のように使用します

View tabIndicator = LayoutInflater.from(getActivity()).inflate(R.layout.tab_indicator, mTabHost.getTabWidget(), false);

インフレータの親の値を次のように設定する必要があります。mTabHost.getTabWidget()

上記のコードを使用してタブインジケーターを設定すると、問題が解決しました

          Java : illegal state exception : no tab know for tag null

アップデート :

mTabHost = (FragmentTabHost) view.findViewById(android.R.id.tabhost);

mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);

View tabIndicatorToday = LayoutInflater.from(getActivity()).inflate(R.layout.tab_indicator, mTabHost.getTabWidget(), false);
        ((TextView) tabIndicatorToday.findViewById(R.id.tv_tab_txt)).setText(getResources().getString(R.string.text));

mTabHost.addTab(mTabHost.newTabSpec(getResources().getString(R.string.text)).setIndicator(tabIndicatorToday), Fragment.class, null);
于 2014-12-12T12:38:51.017 に答える
0

このリンクを参照して問題を解決します

FragmentTabHost - タグが null の既知のタブがありません

タグnullの既知のタブはありません。遅すぎるonCreateViewメソッドで試行しているため、タブホストがまだ初期化されていないことを意味します

onResume メソッドで tabhost を呼び出す

于 2015-12-26T06:25:25.290 に答える