所以我有这段代码:
public void openSearch() {
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
if(mSearchFragment == null) {
mSearchFragment = SearchFragment.newInstance("Search");
t.add(android.R.id.content,mSearchFragment);
} else {t.show(mSearchFragment); }
t.commit();
}
我从这里打电话给openSearch:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
boolean returnValue = false;
switch (item.getItemId()) {
case R.id.action_search:
openSearch();
}
}
在openSearch()运行之后..立即调用onTabSelected。为什么是这样?
@Override
public void onTabSelected(ActionBar.Tab tab,
FragmentTransaction ft) {
如果您需要mroe信息,请告诉我。我只包括我认为与减少喋喋不休相关的部分。甚至更疯狂的是,我第一次运行这个onTabSelected时会被选中,但是如果我导航我的应用程序并再次运行openSearch,那么onOptionsItemSelected将不会再次被调用。它只是初始时间
编辑: 这是主要的内容视图,我只是为viewPager提供片段。每个片段的布局都是相同的,一个带有一个LinearLayout子元素的FrameLayout。
<LinearLayout
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:color/holo_orange_dark"
android:visibility="gone" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is the search view" />
</LinearLayout>
<android.support.v4.view.ViewPager
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />