我正在试图找出为什么我的布局上对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>
答案 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