Android:findViewById返回类型是View而不是ScrollView

时间:2016-10-16 15:09:13

标签: java android xml uiscrollview

我正在试图找出为什么我的布局上对findViewById的调用返回泛型类型“View”而不是“ScrollView”类型,该视图被声明为。

如果你看下面,我的xml文件清楚地将id为“scrollview”的视图列为<ScrollView>,但此元素上的findViewById只返回一个View,而不是ScrollView。为什么会这样?

注意:此xml布局的父容器是片段,不确定这是否会改变。

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.menu_fragment_capo, container, false);

    mScrollview = v.findViewById(R.id.scrollview);                 //ERROR HERE
    mScrollview.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            //mScrollview.smoothScrollTo();
            return true;                                                   //true = not scrollable
        }
    });
}

scroller_layout.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/buttonLayoutParent"
            android:orientation="vertical"  >
        </LinearLayout>
    </ScrollView>
</RelativeLayout>

4 个答案:

答案 0 :(得分:2)

mScrollview = v.findViewById(R.id.scrollview);更改为

 mScrollview = (ScrollView)v.findViewById(R.id.scrollview);

FindViewById返回View,它是所有ui元素的超类,因此你需要将它转换为特定的类型。

答案 1 :(得分:1)

findViewById返回View。您需要cast将其ScrollView改为mScrollview = (ScrollView) v.findViewById(R.id.scrollview); ,如下所示,

true

答案 2 :(得分:1)

请投出

 mScrollview = (ScrollView)v.findViewById(R.id.scrollview);

答案 3 :(得分:-1)

总是在片段的情况下你需要转换你的布局或小部件来查看例如:mscroll =(Scrollview)yourview.findviewbyid(R.id.scroll)我还要求你看看这个。 findViewById in Fragment