gpt4 book ai didi

Android以编程方式添加 fragment - 在父级和布局中的位置

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:00 24 4
gpt4 key购买 nike

好的,我正在尝试创建一个通用应用程序,它在手机 View 中显示 3 个选项卡,在平板电脑横向 View 中显示 3 列。因此,我使用线性布局创建了几个不同的 XML 布局。

但是,使用 fragment 时,我遇到了一个问题 - 当在该 fragment 中进行选择时,我想删除最左边的列。我相信我可以做到这一点,但事实证明我无法删除在 XML 中声明的 fragment 。所以现在,我尝试用 XML 创建中间和右边的列:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/menu_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<fragment
android:id="@+id/classification_fragment"
android:name="uk.colessoft.android.hilllist.fragments.MenuClassificationFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:layout="@layout/list_classifications" >
</fragment>

<fragment
android:id="@+id/map"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
class="com.google.android.gms.maps.SupportMapFragment" />

</LinearLayout>

然后使用

添加第一列
FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MenuCountryFragment countryFragment=new MenuCountryFragment();
fragmentTransaction.add(R.id.menu_layout, countryFragment, "country_menu").commit();

但是我有两个问题:

a) 上面的代码只将 fragment 放在线性布局的右侧,我无法指定位置。它需要在左侧。

b) XML 让我可以自由地根据屏幕尺寸/方向为 fragment 定义不同的权重。在 Fragments 中以编程方式设置布局参数似乎是一种倒退。我通过在 xml 中放置一个占位符 View 来解决这个问题,我从中读取布局参数并将它们分配给 onCreateView 但这是一个 hack。

我知道我可以通过将 fragment 添加为 xml 中第一个元素的子元素来将 fragment 放在正确的位置,但是当我这样做并删除 fragment 时,它会留下一个空白区域。

最佳答案

为您要添加的新 fragment 创建一个占位符(在您的 XML 中),类似这样...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/menu_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<FrameLayout
android:id="@+android:id/realtabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />


<fragment
android:id="@+id/classification_fragment"
android:name="uk.colessoft.android.hilllist.fragments.MenuClassificationFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:layout="@layout/list_classifications" >
</fragment>

<fragment
android:id="@+id/map"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
class="com.google.android.gms.maps.SupportMapFragment" />

</LinearLayout>

然后,不是在运行时添加新 fragment ,而是替换空容器的内容...

FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MenuCountryFragment countryFragment=new MenuCountryFragment();
fragmentTransaction.replace(R.id.realtabcontent, newFrag).commit();
fragmentManager.executePendingTransactions();

希望这对您有所帮助。

关于Android以编程方式添加 fragment - 在父级和布局中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992085/

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