android-support-v4 版本中的片段 ID。 22
Fragment id in android-support-v4 rev. 22
有MainActivity(扩展FragmentActivity)和MainActivityFragment(扩展android.support.v4.app.Fragment)。 MainActivityFragment 的纵向和横向屏幕方向有不同的布局。
将 android-support-v4 lib 的版本从 21.0.3 切换到 22.0.0 后,我在旋转应用程序时得到以下堆栈跟踪:
java.lang.RuntimeException: Unable to start activity
...
Caused by: java.lang.ClassCastException: android.view.AbsSavedState cannot be cast to android.widget.ScrollView$SavedState
at android.widget.ScrollView.onRestoreInstanceState(ScrollView.java:1758)
at android.view.View.dispatchRestoreInstanceState(View.java:13740)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2887)
at android.view.View.restoreHierarchyState(View.java:13718)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:465)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1118)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1927)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:544)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
at android.app.Activity.performStart(Activity.java:6006)
...
activity_main.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment"
android:name="com.example.myapplication.MainActivityFragment"
tools:layout="@layout/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
layout/fragment_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/relativeLayout"
tools:context=".MainActivityFragment">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
layout-land/fragment_main.xml:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/scrollView"
tools:context=".MainActivityFragment">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</ScrollView>
因此两个片段布局都有不同的根 ID。但在 support-lib-v4 22.0.0 中似乎不再重要了。此外,仅通过传递 R.id.fragment 就可以找到两种布局的根视图。这是代码,请参阅下面的解释:
public class MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
findViewById(R.id.relativeLayout); // (1)
findViewById(R.id.scrollView); // (2)
findViewById(R.id.fragment); // (3)
}
}
(1) - 带转。 21 returns RelativeLayout for portrait mode, null in landscape;与转。 22 return 在两种模式下均为空
(2) - 带转。 21 returns null for portrait mode, ScrollView in landscape;与转。 22 return 在两种模式下均为空
(3) - 有转。 21 returns 布局,两种模式都包含内部片段;在转。 22 returns RelativeLayout 或 ScrollView 取决于方向。
我的问题:API 的这种变化是否记录在某处?我是否应该更改我的 layout/fragment 代码,假设它不是支持库的错误?
我的 Android 4.1 设备上的 Android 系统库(不支持-lib-v4)中的 Activity 和片段 类 具有与最新(22.1)相同的行为.1) support-lib-v4 版本。所以,我想 "new" 行为不是错误,而是修复。
有MainActivity(扩展FragmentActivity)和MainActivityFragment(扩展android.support.v4.app.Fragment)。 MainActivityFragment 的纵向和横向屏幕方向有不同的布局。
将 android-support-v4 lib 的版本从 21.0.3 切换到 22.0.0 后,我在旋转应用程序时得到以下堆栈跟踪:
java.lang.RuntimeException: Unable to start activity
...
Caused by: java.lang.ClassCastException: android.view.AbsSavedState cannot be cast to android.widget.ScrollView$SavedState
at android.widget.ScrollView.onRestoreInstanceState(ScrollView.java:1758)
at android.view.View.dispatchRestoreInstanceState(View.java:13740)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2887)
at android.view.View.restoreHierarchyState(View.java:13718)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:465)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1118)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1927)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:544)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
at android.app.Activity.performStart(Activity.java:6006)
...
activity_main.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment"
android:name="com.example.myapplication.MainActivityFragment"
tools:layout="@layout/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
layout/fragment_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/relativeLayout"
tools:context=".MainActivityFragment">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
layout-land/fragment_main.xml:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/scrollView"
tools:context=".MainActivityFragment">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</ScrollView>
因此两个片段布局都有不同的根 ID。但在 support-lib-v4 22.0.0 中似乎不再重要了。此外,仅通过传递 R.id.fragment 就可以找到两种布局的根视图。这是代码,请参阅下面的解释:
public class MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
findViewById(R.id.relativeLayout); // (1)
findViewById(R.id.scrollView); // (2)
findViewById(R.id.fragment); // (3)
}
}
(1) - 带转。 21 returns RelativeLayout for portrait mode, null in landscape;与转。 22 return 在两种模式下均为空
(2) - 带转。 21 returns null for portrait mode, ScrollView in landscape;与转。 22 return 在两种模式下均为空
(3) - 有转。 21 returns 布局,两种模式都包含内部片段;在转。 22 returns RelativeLayout 或 ScrollView 取决于方向。
我的问题:API 的这种变化是否记录在某处?我是否应该更改我的 layout/fragment 代码,假设它不是支持库的错误?
Activity 和片段 类 具有与最新(22.1)相同的行为.1) support-lib-v4 版本。所以,我想 "new" 行为不是错误,而是修复。