Android 替换片段:上一个视图在后台仍处于活动状态?

Android 替换片段:上一个视图在后台仍处于活动状态?,android,android-fragments,android-fragmentactivity,fragment-tab-host,Android,Android Fragments,Android Fragmentactivity,Fragment Tab Host,我正在处理一个应用程序,当选项卡被更改时,我必须更改一个选项卡的视图。我使用OnTabChangedListener按照以下方式进行操作。我可以替换视图。但是,当我将选项卡更改为其他选项卡时,以前的视图是否仍可以在后台进行单击?为什么会这样?在前面,会填充新视图,但如果我点击屏幕上上上以前视图控件所在的任何位置,就会执行该功能。我不明白问题出在哪里。请帮帮我。谢谢 public class FragmentTabs extends FragmentActivity implements OnTa

我正在处理一个应用程序,当选项卡被更改时,我必须更改一个选项卡的视图。我使用
OnTabChangedListener
按照以下方式进行操作。我可以替换视图。但是,当我将选项卡更改为其他选项卡时,以前的视图是否仍可以在后台进行单击?为什么会这样?在前面,会填充新视图,但如果我点击屏幕上上上以前视图控件所在的任何位置,就会执行该功能。我不明白问题出在哪里。请帮帮我。谢谢

public class FragmentTabs extends FragmentActivity implements OnTabChangeListener {

private FragmentTabHost mTabHost;

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

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.fragment_tabs);

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

    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

    mTabHost.setOnTabChangedListener(this);

    if (Database.getSharedObject(getApplicationContext()).getAppSettings().getListView() == 1) {
        mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("", getResources().getDrawable(R.drawable.home_tab)), HomeFragment.class, null);

    } else {
        mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("", getResources().getDrawable(R.drawable.home_tab)), CalendarViewFragment.class, null);
    }
    mTabHost.addTab(mTabHost.newTabSpec("groups").setIndicator("", getResources().getDrawable(R.drawable.groups_tab)), GroupFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("templates").setIndicator("", getResources().getDrawable(R.drawable.templates_tab)), TemplateFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("settings").setIndicator("", getResource
    mTabHost.getTabWidget().getChildAt(0).getLayoutParams().height = height;
    mTabHost.getTabWidget().getChildAt(1).getLayoutParams().height = height;
    mTabHost.getTabWidget().getChildAt(2).getLayoutParams().height = height;
    mTabHost.getTabWidget().getChildAt(3).getLayoutParams().height = height;
    // Database.getSharedObject(getApplicationContext());

    mTabHost.setCurrentTab(0);
}

@Override
protected void onResume() {
    super.onResume();

}

@Override
public void onTabChanged(String arg0) {

    mTabHost.getCurrentTabView().invalidate();

    if (mTabHost.getCurrentTab() == 0) {
        if (Database.getSharedObject(getApplicationContext()).getAppSettings().getListView() == 1) {

            HomeFragment homeFragment = new HomeFragment();
            mTabHost.getCurrentTabView().invalidate();
            getSupportFragmentManager().beginTransaction().replace(R.id.realtabcontent, homeFragment).addToBackStack(null).commit();
        } else {

            CalendarViewFragment calendarViewFragment = new CalendarViewFragment();
            mTabHost.getCurrentTabView().invalidate();
            getSupportFragmentManager().beginTransaction().replace(R.id.realtabcontent, calendarViewFragment).addToBackStack(null).commit();

        }

    }

}

}

将android:clickable=“true”添加到新选项卡的根布局中。它将防止点击事件通过后面的布局传递。

但是为什么旧片段仍然存在?代码片段说他们正在调用
replace
而不是
add
,这将导致先删除现有的片段。是..它一定不在那里。但我不知道为什么它仍然会收到点击事件。@minipf它会阻止任何类型的点击tab小部件。我也有这个问题。如果我弄明白了,我会回答的,但我确切地知道你的问题所在。我认为这可能与我们没有在标签页上使用安卓.R.id.content这一事实有关,但我还没有测试过,所以这可能根本不是问题所在。您在过去三周内是否取得了任何进展?这可能还与我们调用
setContentView
这一事实有关,而开发者文档中没有这样做(无论如何,在ActionBar中使用
OnTabChangedListener
)。我认为你使用的是TabHost而我使用的是ActionBar并不重要(我打赌ActionBar只是使用了一个TabHost。也许问题在于FragmentManager。。