1

谷歌搜索我看到许多声明嵌套片段不能使用 XML。现在我是 Android 新手,但我的应用程序使用带有嵌套片段的 XML。我还没有让监听器和接口工作(也许这就是人们说你不能使用 XML 的原因),但是 GUI 工作。

我的问题:我读到的关于不将 XML 用于嵌套片段的评论是什么意思?

这里有一个链接到一个声明 XML 不能与嵌套片段一起使用:

下面的代码创建了 3 个无线电组(每个在一个片段中),水平排列在顶部(在另一个片段中),下面有一个列表视图(在另一个片段中)。片段可以很好地控制不同显示类型的外观。

这是我的代码:

public class SetupNew extends Activity {  
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ngs);   
}}

ngs.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<fragment android:id="@+id/frag_options_all"
          android:layout_height="250dp"              
          android:layout_width="fill_parent"
          android:layout_marginLeft="5dp"
          android:layout_marginRight="5dp"
          android:name="com.EXAMPLE.frag_class_options_all"/>
<fragment android:id="@+id/frag_select_opponent"
          android:layout_height="fill_parent"
          android:layout_marginLeft="5dp"
          android:layout_marginTop="10dp"
          android:layout_width="fill_parent"
          android:name="com.EXAMPLE.frag_class_opponents"/>
</LinearLayout>

frag_class_options_all.java

    public class frag_class_options_all extends Fragment {
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.options_all, container, false);
      return view;
  }}

frag_class_opponents.java

public class frag_class_opponents extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {  
    //working contact listview
}

options_all.xml

<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/frag_options"
          android:layout_height="fill_parent"              
          android:layout_width="80dp"
          android:layout_marginRight="15dp"
          android:name="com.EXAMPLE.frag_class_options"/>
<fragment android:id="@+id/frag_ship_limit"
          android:layout_height="fill_parent"              
          android:layout_width="75dp"
          android:layout_marginRight="15dp"
          android:name="com.EXAMPLE.frag_class_limit_options"/>
<fragment android:id="@+id/frag_allowable_ship"
          android:layout_height="fill_parent"              
          android:layout_width="fill_parent"
          android:name="com.EXAMPLE.frag_class_allow"/>
</LinearLayout>

frag_class_optionsfrag_class_limit_optionsfrag_class_allow都遵循这样的:

public class frag_class_options extends Fragment{
RadioGroup radioGroup;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.options_m, container, false);

    radioGroup = (RadioGroup) view.findViewById(R.id.rg_limit);     
    return view;
}     
}
4

3 回答 3

3

为了嵌套 Fragment,您必须使用 Fragment 的 getChildFragmentManager 方法。XML 中片段的默认 XML 实现使用导致错误的 Activity 的 getFragmentManager。由于 childFragmentManager 只能通过 Java 代码访问,这就是为什么不能使用 XML 嵌套片段的原因

查看更多信息:http: //developer.android.com/about/versions/android-4.2.html#NestedFragments

于 2014-05-16T05:33:10.370 回答
2

This Duplicate id bug is why you shouldn't declare your nested fragments in xml.

Declaring nested fragments in xml is not forbidden in android and it works as long as you do not destroy the fragment and try to recreate it (which happens inside of the fragmentManager.replace) So for example if you have a navigation drawer and do the following:

fragManager.replace(containerId, new fragmentOne()); fragManager.replace(containerId, new fragmentTwo());

fragManager.replace(containerId, new fragmentOne());

The 3rd replace will probably crash with the duplicate id bug. I don't know why this happens but I can assure you it does and it is very frustrating! Personally I wish nested fragments failed completely in xml rather than partially working!

于 2014-10-20T10:36:04.057 回答
-1

我的问题:我读到的关于不将 XML 用于嵌套片段的评论是什么意思?

答:我不知道。你还没有告诉我们你在哪里找到这些评论,所以我们没有什么可继续的。也许评论的作者定义了“嵌套片段”一词的含义,也许他没有。这不是标准的 XML 术语,我无法从您的问题中猜出它的含义。我在您的 XML 示例中看到称为“片段”的元素,但它们不是嵌套的。

也许这个问题是针对 android 的,在这种情况下,您不应该将其标记为一般 XML 问题。

于 2013-07-19T08:31:31.150 回答