0

在我的 android 应用程序中,我在我的 xml 布局中定义了一个片段。代码如下:

<fragment
    android:id="@+id/list_fragment"
    android:layout_width="220dp"
    android:layout_height="fill_parent"
    android:layout_marginLeft="62dp"
    android:layout_marginTop="20dp"
    class="com.example.shantaportfolio.ListFragment" />

但我需要class从我的 java 代码中更改片段的属性。我该怎么做?使用哪种方法?

4

4 回答 4

1

如果您只想替换布局中的Fragment实现,请在布局中插入“容器元素”并在Fragment那里设置:

在布局中:

<FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="0dp">
</FrameLayout>

在代码中:

final FragmentTransaction tx = this.getFragmentManager().beginTransaction();
tx.replace(R.id.fragment_container, aFragment);
tx.commit();
于 2013-03-11T13:44:00.427 回答
1

您需要在 .xml 文件<fragment/>中更改<FrameLayout/>

<fragment
    android:id="@+id/list_fragment"
    android:layout_width="220dp"
    android:layout_height="fill_parent"
    android:layout_marginLeft="62dp"
    android:layout_marginTop="20dp"
/>

然后使用java代码以编程方式添加片段

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ListFragment fragment = new ListFragment();
fragmentTransaction.replace(R.id.list_fragment, fragment);
fragmentTransaction.commit();

您可以从 http://developer.android.com/guide/topics/fundamentals/fragments.html获取更多详细信息

于 2013-03-11T13:52:37.453 回答
0

您不能拦截LayoutInflator实例化声明的片段。但是您可以在之后用另一个片段替换()您的活动中的任何片段。

更新:

您可以使用 的实现LayoutInflator.Factory,并使用其onCreateView()方法为布局中的某些特定标签做一些不同的事情。

您提供此工厂实现以供LayoutInflator使用setFactory()

于 2013-03-11T13:33:34.317 回答
0

您不能更改在 XML 中声明的片段。相反,声明一个片段所属的容器,并在onCreate()您的活动方法中,将片段附加到该容器。当您想要交换 Fragments 时,只需使用该replace方法并指定要交换的 Fragment。

注意:容器通常是LinearLayout通过将它们排列成特定尺寸来制作的。下面是一个简单的 XML 布局,左边的布局是屏幕大小的 2/3,右边的布局是屏幕大小的 1/3

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

    <LinearLayout
        android:id="@+id/fragment_container_parent"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />

    <LinearLayout
        android:id="@+id/fragment_container_child"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</LinearLayout>
于 2013-03-11T14:40:46.903 回答