0

我的第一个 Android 应用程序需要帮助。我有一个活动,顶部有一个操作栏和导航选项卡。由于这些导航选项卡,我不得不将我的活动转换为片段。

所以其中一个活动(现在是一个片段)包含两个片段,一个在左侧的 ListFragment 和一个在右侧的 DetailFragment,以便用户能够从列表中选择一个项目并直接查看右侧的详细信息。

但是现在Activity已经变成了Fragment,是Fragment拥有List-和DetailFragment。这工作正常,直到我想更改 DetailsFragment。

首先,这里是保存另外两个的 Fragment 的代码:

public class BlackboardFragment extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        return inflater.inflate(R.layout.fragment_layout, container, false);
    }

}

这是 fragment_layout.xml 文件(保存在 layout-land 中):

<?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:orientation="horizontal" >

    <fragment
        android:id="@+id/interfaces"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_marginRight="20dp"
        android:layout_weight="0.60"
        class="org.fawkesrobotics.app.InterfaceFragment" />

    <FrameLayout
        android:id="@+id/viewer"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</LinearLayout>

因此,ListFragment 被命名为 InterfaceFragment,代码如下:

public class InterfaceFragment extends ListFragment {

    boolean mDualPane;

//      some other code

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);

        create_list();

        View viewerFrame = getActivity().findViewById(R.id.viewer);
        mDualPane = viewerFrame != null
                && viewerFrame.getVisibility() == View.VISIBLE;

        if (savedInstanceState != null) {
            mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
        }
    }

//      some other code
}

这是,它不起作用的地方。Fragment 实际上显示了列表(它是在 create_list() 中创建的,其中设置了 ListAdapter 和其他所有内容),但我的问题是,viewerFrame 为空。我在上面的xml文件中声明了id查看器,所以我不明白他为什么找不到id。它是“属于” BlackBoardFragment 还是属于我的整体活动?因为在 BlackboardFragment 中,我也尝试使用 getActivity().findViewById 并且它有效。为什么 InterfaceFragment 找不到它?

我还测试了,如果他真的在 layout-land 中使用了 fragment_layout.xml 并且他确实使用了。所以他应该知道 id 查看器,但显然不知道。

如果您需要更多代码或 DetailsFragment 中的代码,我可以发布它。

预先感谢您的帮助!:)

4

2 回答 2

1

FragmentAndroid SDK 不支持嵌套。也就是说,您的 Android 应用程序中不能有“片段中的片段”。对不起。

编辑:

NestedFragment现在是官方 Android 4.2 SDK 的一部分!耶!

于 2012-06-13T15:02:34.677 回答
1

使用 FragmentManager 获取 Fragment……

ExampleFragment fragment = (ExampleFragment)  getActivity().getFragmentManager().findFragmentById(R.id.example_fragment);
于 2012-06-13T14:51:25.963 回答