1

Fragments在 a中实现了一些FragmentTabHost,使用:

内部 FragmentActivity 类:

FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.e(TAG, "onCreateView()");

    setContentView(R.layout.activity_main);

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

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

    mTabHost.setOnTabChangedListener(this);
}

在其中一个fragment说法AudioFragment中,有一个button应该在 AudioFragment 的当前片段上打开一个新片段。

AudioFragment.class 内部

@Override
public void onClick(View button) {
    switch (button.getId()) {
    case R.id.bOpenNewFragment:

        // WHAT TO CODE, TO REPLACE THE CURRENT FRAGMENT OF AudioFragment 

        break;
    }

}

尝试使用通常的代码:

Fragment fragment = new ShowAudioDetailsFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.realtabcontent, fragment);
transaction.addToBackStack(null);
transaction.commit();

但是,当我切换到另一个选项卡时,它会产生问题(例如未维护状态并且新片段的视图正在与其他选项卡的布局合并)。

那么如何用 FragmentTabHost 中打开的片段替换片段

谢谢你

4

1 回答 1

0

只需添加这一行

((RelativeLayout) findViewById(R.id.realtabcontent)).removeAllViews(); // whatever layout you have

前 :

transaction.replace(R.id.realtabcontent, fragment);
于 2013-10-22T06:01:05.450 回答