如何为不同类型的2个视图使用相同的id

时间:2018-02-14 12:38:25

标签: android

我有两个滚动视图,一个是纵向布局,另一个是水平布局(layout-land),而onCreate我使用findViewById使用共享id,问题是,其中一个是ScrollView和另一个是Horizo​​ntalScrollView,当我旋转移动设备时会导致以下异常:

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;
    }

3 个答案:

答案 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)!