我正在使用Android应用程序,我已经有3个标签,每个标签使用Fragments。在其中一个选项卡(Tab3Fragment)中,我导航到另一个片段(NewExampleFragment)。 当我尝试从子片段(NewExampleFragment)导航回选项卡片段(Tab3Fragment)时,会发生此问题。从子片段中可以看到选项卡,但单击它们不会执行任何操作。我希望能够从子片段访问这3个选项卡。如何使它工作?
层次结构为:AppCompatActivity - >片段(标签) - >子片段(从这里我想再次访问标签)
的活动:
public class WordPageActivity extends AppCompatActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_word_page);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_word_page);
setSupportActionBar(toolbar);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);
mTabHost.addTab(
mTabHost.newTabSpec("tab1").setIndicator(getString(R.string.tab1_text), null),
Tab1Fragment.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab2").setIndicator(getString(R.string.tab2_text), null),
Tab2Fragment.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab3").setIndicator(getString(R.string.tab3_text), null),
Tab3Fragment.class, null);
}
活动布局:
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/content_frame_word_page"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_word_page"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
android:theme="@style/AppTheme.NoActionBar"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
其中一个标签:
public class Tab3Fragment extends Fragment implements View.OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_tab3, container, false);
Button openExamplePage = (Button)v.findViewById(R.id.openExamplePageButton);
openExamplePage.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.openExamplePageButton:
onOpenExamplePage(v);
break;
}
}
public void onOpenExamplePage(View v){
getFragmentManager().beginTransaction().replace(R.id.content_frame_word_page, new NewExampleFragment()).commit();
}
}
儿童片段:
public class NewExampleFragment extends Fragment implements View.OnClickListener {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_new_example, container, false);
return rootView;
}
答案 0 :(得分:0)
我尝试过TabLayout,但问题仍然存在。但是,我通过更改onOpenExamplePage方法中替换的布局来解决它:
public void onOpenExamplePage(View v){
getFragmentManager().beginTransaction().replace(android.R.id.tabcontent, new NewExampleFragment()).commit();
}
它应该是android.R.id.tabcontent而不是R.id.content_frame_word_page,因为在Activity布局中我要替换的部分是
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
不是整个LinearLayout。