android <merge /> 只能与有效的 ViewGroup 根和 attachToRoot=true 一起使用,尽管没有合并

Posted

技术标签:

【中文标题】android <merge /> 只能与有效的 ViewGroup 根和 attachToRoot=true 一起使用,尽管没有合并【英文标题】:android <merge /> can be used only with a valid ViewGroup root and attachToRoot=true despite no merge 【发布时间】:2016-07-30 12:48:21 【问题描述】:

我的应用中发生了一件奇怪的事情。我收到上述错误,但我没有在代码中的任何地方使用&lt;merge&gt; 标签。

这里是错误的相关xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_>

    <RelativeLayout
        android:layout_weight="1"
        android:layout_
        android:layout_>

        <Button
            android:id="@+id/alarm_set_button"
            android:layout_
            android:layout_
            android:layout_centerInParent="true"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:background="@color/mediumGray"
            android:text="SET ALARM"
            android:onClick="showTimePickerDialog"/>

    </RelativeLayout>


    <RelativeLayout
        android:id="@+id/sleep_text_block"
        android:layout_weight="1"
        android:layout_
        android:layout_
        android:visibility="invisible">
        <TextView
            android:id="@+id/sleep_text"
            android:layout_
            android:layout_
            android:layout_marginTop="50dp"
            android:layout_centerHorizontal="true"
            android:textSize="20sp"
            android:text="Alarm set to :"/>

        <TextView
            android:id="@+id/alarm_time"
            android:layout_
            android:layout_
            android:layout_marginTop="20dp"
            android:layout_centerHorizontal="true"
            android:layout_below="@id/sleep_text"
            android:textColor="@color/colorAccent"
            android:textSize="36sp" />
    </RelativeLayout>

</LinearLayout>

此代码附带一个片段 java 文件。粘贴在下面供您参考:

public class SleepSetFragment extends Fragment 

    SharedPreferences pref;
    private static final String PREF_NAME = "userProfile";
    TextView alarmTime;

    public static SleepSetFragment newInstance()
    
        SleepSetFragment fragment = new SleepSetFragment();
        return fragment;
    

    @Override
    public void onCreate(Bundle savedInstanceState)
    
        super.onCreate(savedInstanceState);
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    
        View view = inflater.inflate(R.layout.fragment_sleep_set, container, false);
        RelativeLayout alarmSetBlock = (RelativeLayout) view.findViewById(R.id.sleep_text_block);
        pref = this.getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
        boolean isAlarmSet = pref.getBoolean("isAlarmSet", false);
        alarmTime = (TextView) view.findViewById(R.id.alarm_time);
        if (isAlarmSet)
        
            alarmSetBlock.setVisibility(View.VISIBLE);
            String display = pref.getString("alarmTime", "notFound");
            alarmTime.setText(display);
        
        return view;
    

--编辑--

这里是堆栈跟踪文件:http://www.filedropper.com/stacktrace

【问题讨论】:

【参考方案1】:

对我来说,根本原因就在这一行R.layout.fragment_sleep_set

愿源与你同在!

【讨论】:

以上是关于android <merge /> 只能与有效的 ViewGroup 根和 attachToRoot=true 一起使用,尽管没有合并的主要内容,如果未能解决你的问题,请参考以下文章

Android 数据绑定不适用于 <merge> 属性

Android XML 布局中 <merge> 和 <include> 用法的简单示例

merge布局

android <merge /> 只能与有效的 ViewGroup 根和 attachToRoot=true 一起使用,尽管没有合并

为啥我们不应该将每个包含的 Android XML 布局包装在一个 <merge> 对中?

android开发之merge结合include优化布局