TabHost的getTabWidget()返回null,尽管该对象包含mTabWidget

时间:2015-07-17 12:48:00

标签: android android-fragments android-tabhost robolectric fragment-tab-host

在我的Robolectric测试中,我按照以下方式运行我的片段:

sut = new TestedFragment();
SupportFragmentTestUtil.startFragment(sut);

在片段onCreateView中我有android.support.v4.app.FragmentTabHost我尝试使用tabWidget

inflatedView = inflater.inflate(R.layout.some_layout, container, false);
tabHost = (FragmentTabHost) inflatedView.findViewById(android.R.id.tabhost);
fragmentManager = getChildFragmentManager();
tabHost.setup(getActivity(), fragmentManager, android.R.id.tabcontent);
tabHost.getTabWidget(); //returns null

此行返回null,尽管此行设置断点显示tabHost的{​​{1}}的值为 mTabWidget为什么我会获得android.widget.TabWidget{7a4d42e6 V.E..... ......I. 0,0-0,0 #1020013 android:id/tabs}

代码适用于android,我不参与机电单元测试

2 个答案:

答案 0 :(得分:0)

Robolectric使用影子类来隐藏一些真实的代码。因为并非所有都可以在JVM上完成或必须进行调整。

打开ShadowTabHost类并在getTabWidget方法中设置断点。然后你就可以看到为什么你得到null。

答案 1 :(得分:-1)

Try this

 public class MainActivity extends TabActivity {

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

        //setContentView(R.layout.activity_main);

        TabHost mTabHost = getTabHost();

        mTabHost.addTab(mTabHost.newTabSpec("first").setIndicator("First").setContent(new Intent(this  ,FirstActivity.class )));
        mTabHost.addTab(mTabHost.newTabSpec("second").setIndicator("Second").setContent(new Intent(this , SecondActivity.class )));
        mTabHost.setCurrentTab(0);


    }
    }