我有两个滚动视图,一个是纵向布局,另一个是水平布局(layout-land),而onCreate我使用findViewById使用共享id,问题是,其中一个是ScrollView和另一个是HorizontalScrollView,当我旋转移动设备时会导致以下异常:
Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.widget.ScrollView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/mainscreen_scrollview. Make sure other views do not use the same id.
我给两个ScrollViews提供相同ID的原因背后的代码,下面的代码是onCreate(....)
mHomeScrollView = (FrameLayout) findViewById(R.id.mainscreen_scrollview);
mHomeScrollView.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
return mGestureDetector.onTouchEvent(event);
}
});
编辑1:
根据与尊重成员的讨论,似乎这是最合适的解决方案,我希望它可以帮助其他人:
int scrollViewId = R.id.mainscreen_scrollview;
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
scrollViewId = R.id.mainscreen_horizontalscrollview;
}
答案 0 :(得分:0)
您对string refs
ScrollView id
采取了相同的Scrollview
错误:强>
确保其他视图不使用相同的ID。
id为homescreen_scrollview
注意:两个scrollView
ID都应该不同。
答案 1 :(得分:0)
通过创建两个具有相同名称但位于不同目录(例如layout& layout_land)的布局文件,您可以为同一对象分配两个相同的ID。只需将android:id="@+id/my_id"
的ID设置为两者即可。注意:两者都必须是同一个对象的一部分(例如两个ScrollViews)。
答案 2 :(得分:0)
我不确定这一点,但你可以尝试一下,告诉我们它是否有用。
scrollView var1= (scrollview) var.findViewByID(R.id.first_scroll_view);
HorizontalScrollView var2 = (HorizontalScrollView) var2.findViewByID(R.id.second_scroll_view)!