标签不适用于从其中一个标签

时间:2017-05-22 08:00:44

标签: android android-fragments tabs

我正在使用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;
}

1 个答案:

答案 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。