android - 根据操作栏选项卡更改 Activity 内容 View

标签 android android-activity tabs android-fragments

我想知道这是否可以做到。基本上,我有一个包含 2 个 fragment 的布局,我将其用于我的大部分选项卡,但在其中 2 个选项卡上,我想添加更多 fragment 以显示更多内容。更改选项卡时是否可以将内容 View 更改为不同的布局?

如果无法做到这一点,我会考虑创建一个包含我需要的所有 fragment 部分的布局,并且只更改 fragment 的布局,这样我不使用的部分就不会“显示”。我并不是说要使用 FragmentTransaction.hide(),因为我希望 fragment 在其他 fragment 未被使用时填满屏幕。这是个坏主意还是有更简单的方法来做我想做的事?

这是我的 Activity 和标签代码

public class Tabs extends Activity{
long deleteID;

@Override
public void onCreate(Bundle create){
    super.onCreate(create);

    setContentView(R.layout.main_layout);

    createTabs();
    ActionBar bar = getActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    bar.setDisplayHomeAsUpEnabled(true);

    if(create != null){
        bar.setSelectedNavigationItem(create.getInt("Home",0));
    }

}

我还添加了一些标签,但那不重要

这是actionbar子类

private class TabListener implements ActionBar.TabListener{
    TabContent mFragment;

    public TabListener(TabContent fragment) {
        mFragment = fragment;
    }

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

    }

    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {

            ListFragment newListFragment = new BowlersListFragment();
            Fragment newFragment = new BowlerEntryFrag();
            ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.frameOne, newListFragment);
            ft.replace(R.id.frameTwo, newFragment);

        ft.addToBackStack(null);
        ft.commit();
    }

    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {

        if(ft != null){
            ft.remove(mFragment);
        }
    }

}

}

我试过 Activity.setContentView(r.layout.newView) 但那行不通

最佳答案

我有类似的问题,所以这样实现的。我有一个 mainActivity 用于保存和创建选项卡。该 Activity 使用带有一个 fragment 容器 main.xml 的布局:

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

<LinearLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</RelativeLayout>

在我的 Activity 中,我有以下用于创建选项卡和 fragment 的代码:

historyTab = actionbar.newTab().setText("History");
historyTab.setTabListener(new MyTabsListener(new HistoryFragment()));
actionbar.addTab(historyTab);

我的 tabListener 看起来像这样:

    private class MyTabsListener implements ActionBar.TabListener {
    public Fragment fragment;
    private boolean isFragmentAdded = false;

    public MyTabsListener(Fragment fragment) {
        this.fragment = fragment;
    }
           @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {

        FragmentManager fragMgr = getSupportFragmentManager();
        FragmentTransaction xaction = fragMgr.beginTransaction();

        if (fragment instanceof HistoryFragment) {
            fragment = new HistoryFragment();
            xaction.add(R.id.fragment_container, fragment);
        } else if (fragment instanceof .. some other fragment..) {
            fragment = new .. some other fragment();
            xaction.add(R.id.fragment_container, fragment);
        } 
        }

        xaction.commit();
    }

    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {

        FragmentManager fragMgr = getSupportFragmentManager();
        FragmentTransaction xaction;

        xaction = fragMgr.beginTransaction();
        Fragment fragment = fragMgr.findFragmentById(R.id.fragment_container);
        xaction.remove(fragment);

        xaction.commit();
    }

}

在我的示例中,History fragment 的布局可以是任何内容,甚至可以是包含两个 fragment 的布局,也可以是您需要的任何 fragment 。请小心,并在 fragment 的 onCreateview 方法中使用:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle          
savedInstanceState) {
    if (view == null) { // this line is very important!
        view = inflater.inflate(R.layout.history_fragment_layout, container, false);
        listView = (ListView) view.findViewById(R.id.historyList);
    }

    return view;
}

希望对您有所帮助!:)

关于android - 根据操作栏选项卡更改 Activity 内容 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345051/

相关文章:

Android list 错误 : Activities not assignable to android. app.activity

android - 根据 MainActivity 执行间隔显示一个 AlertDialog

android - 在 android 中使用 viewpager 滑动的嵌套选项卡?

android - 从队列更新 Activity 的最佳方式

javascript - 如何以编程方式强制 Chrome 在新选项卡中显示 PDF 文件?

css - JavaFX 选项卡文本和大小问题

java - 如何从android中的另一个方法调用线程内的run方法?

java - 使用 Android 通过蓝牙发送数据

android - "Cannot override the final method from SherlockActivity"

java - 从 android 文件夹中删除了类文件,但 Eclipse 仍然可以编译并运行,没有任何问题。如何?