1195 Stimmen

findViewById in Fragment

Ich versuche, ein ImageView in einem Fragment zu erstellen, das auf das ImageView-Element verweist, das ich in der XML-Datei für das Fragment erstellt habe. Allerdings ist das findViewById Methode funktioniert nur, wenn ich eine Activity-Klasse erweitere. Gibt es eine Möglichkeit, wie ich sie auch in Fragmenten verwenden kann?

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ImageView imageView = (ImageView)findViewById(R.id.my_image);
        return inflater.inflate(R.layout.testclassfragment, container, false);
    }
}

En findViewById Methode weist einen Fehler auf, der besagt, dass die Methode undefiniert ist.

33voto

Vipul Prajapati Punkte 1103

Innerhalb Fragment Klasse erhalten wir onViewCreated() Überschreibungsmethode, mit der wir unsere Ansichten immer initialisieren sollten, weil wir in dieser Methode die view Objekt. Mit diesem Objekt können wir unsere Ansichten wie folgt finden:

class MyFragment extends Fragment {
    private ImageView imageView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.my_fragment_layout, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        //initialize your view here for use view.findViewById("your view id")
        imageView = (ImageView) view.findViewById(R.id.my_image);
    }
}

30voto

friiky Punkte 426

Sie können dies auch in der onActivityCreated Methode.

public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState);
}

So wie sie es hier tun: http://developer.Android.com/reference/Android/app/Fragment.html (veraltet in API Stufe 28)

getView().findViewById(R.id.foo);

y

getActivity().findViewById(R.id.foo);

sind möglich.

21voto

dreamdeveloper Punkte 1246

getView() ergibt die Ansicht Root

View v = getView().findViewByID(R.id.x);

19voto

Lez Punkte 193

Sie können die Funktion onViewCreated() überschreiben, die aufgerufen wird, nachdem alle Ansichten aufgeblasen worden sind. Es ist der richtige Ort um das Fragment Mitglied auszufüllen View Variablen. Hier ist ein Beispiel:

class GalleryFragment extends Fragment {
    private Gallery gallery;

    (...)

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        gallery = (Gallery) view.findViewById(R.id.gallery);
        gallery.setAdapter(adapter);
        super.onViewCreated(view, savedInstanceState);
    }
}

17voto

Renato Probst Punkte 5557

Die Methode getView() funktionieren nicht bei Fragmenten außerhalb von OnCreate und ähnlichen Methoden.

Sie haben zwei Möglichkeiten: Übergeben Sie die Ansicht an die Funktion bei der Erstellung (was bedeutet, dass Sie Ihre Funktionen nur ausführen können, wenn die Ansicht erstellt wird) oder legen Sie die Ansicht als Variable fest:

private View rootView;

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

public void doSomething () {
    ImageView thumbnail = (ImageView) rootView.findViewById(R.id.someId);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X