如何在动作栏问题中解决android选项卡?

时间:2014-05-18 02:40:07

标签: android tabs android-actionbar

我在操作栏中添加了一些标签,其中包含以下代码。一切都很好看。这里有5个标签。我编写了每个标签以打开一个新的布局。但问题是只有第一个标签工作正常。第二个选项卡打开第五个布局,第三个选项卡打开第五个选项卡不起作用。当我删除第五个选项卡,然后第二个选项卡打开第四个布局,其他按钮不是woking,我无法解决这个问题。请帮我。谢谢! 这是我的编纂, 主类文件;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    android.app.ActionBar actionbar = getActionBar();
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            // show the given tab
        }

        public void onTabUnselected(ActionBar.Tab tab,
                FragmentTransaction ft) {
            // hide the given tab
        }

        public void onTabReselected(ActionBar.Tab tab,
                FragmentTransaction ft) {
            // probably ignore this event
        }
    };

    ActionBar.Tab baby = actionbar.newTab().setText("Baby")
            .setTabListener(tabListener);
    ActionBar.Tab books = actionbar.newTab().setText("Books")
            .setTabListener(tabListener);
    ActionBar.Tab electronics = actionbar.newTab().setText("Electronics")
            .setTabListener(tabListener);
    ActionBar.Tab health = actionbar.newTab().setText("Health and Beauty")
            .setTabListener(tabListener);
    ActionBar.Tab sports = actionbar.newTab().setText("Sports")
            .setTabListener(tabListener);


    Fragment babyFragment = new Baby();
    Fragment booksFragment = new Books();
    Fragment electronicsFragment = new Electronics();
    Fragment healthFragment = new Health();
    //Fragment sportsFragment = new Sports();

    baby.setTabListener(new MyTabsListener(babyFragment));
    books.setTabListener(new MyTabsListener(booksFragment));
    books.setTabListener(new MyTabsListener(electronicsFragment));
    books.setTabListener(new MyTabsListener(healthFragment));
    //books.setTabListener(new MyTabsListener(sportsFragment));

    actionbar.addTab(baby);
    actionbar.addTab(books);
    actionbar.addTab(electronics);
    actionbar.addTab(health);
    actionbar.addTab(sports);
}
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;

public MyTabsListener(Fragment fragment) {
    this.fragment = fragment;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    ft.replace(R.id.fragment_container, fragment);
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    ft.remove(fragment);
}

}

其他所有其他java文件都是这样的;

public class Baby extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.baby, container, false);
}

}

主xml文件;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_gravity="center">
    <LinearLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

 </LinearLayout>
</LinearLayout>

请帮助我解决这个问题。

1 个答案:

答案 0 :(得分:3)

错误似乎在这里:

baby.setTabListener(new MyTabsListener(babyFragment)); // OK
books.setTabListener(new MyTabsListener(booksFragment)); // OK
books.setTabListener(new MyTabsListener(electronicsFragment)); // !!
books.setTabListener(new MyTabsListener(healthFragment)); // !!

您正在将不同的侦听器设置为相同的选项卡(这就是为什么“书籍”显示“健康”片段,而其他人什么都不做)。