gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:26:53 24 4
gpt4 key购买 nike

我想知道这是否可以做到。基本上,我有一个包含 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com