2016-10-16 2 views
-1

Ich versuche herauszufinden, warum mein Aufruf findViewById auf meinem Layout den generischen Typ "View" anstelle des Typs "ScrollView", dass die fragliche Ansicht deklariert wird zurückgegeben wie.Android: findViewById Rückgabetyp ist View anstelle von ScrollView

Wenn Sie unten sehen, listet meine XML-Datei die Ansicht mit der ID "scrollview" eindeutig als <ScrollView> auf, aber findViewById für dieses Element gibt nur eine Ansicht zurück, keine ScrollView. Warum passiert dies?

Hinweis: der übergeordnete Container zu diesem XML-Layout ist ein Fragment, nicht sicher, ob dies Dinge ändert.

@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> 

Antwort

1

findViewById Rückkehr ein View. Sie müssen es einen ScrollViewcast wie folgt

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

Danke. Dies ist die Lösung. – Cody

2

ändern mScrollview = v.findViewById(R.id.scrollview); zu

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

findViewById gibt View die deshalb Superklasse aller ui Elemente ist u es zu bestimmten Typ umwandeln müssen.

1

bitte werfen

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

Immer im Fall von Fragment Sie müssen Ihr Layout oder Widgets für zB anzuzeigen würfen mscroll = (Scroll) yourview.findviewbyid (R.id.scroll) und ich auch Bitte, sieh dir das an. findViewById in Fragment

Verwandte Themen