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.

1615voto

advantej Punkte 19695

Utilice getView() oder den View-Parameter aus der Implementierung der onViewCreated Methode. Sie gibt die Root-Ansicht für das Fragment zurück (derjenige, der von onCreateView() Methode) . Damit können Sie aufrufen findViewById() .

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    ImageView imageView = (ImageView) getView().findViewById(R.id.foo);
    // or  (ImageView) view.findViewById(R.id.foo); 

Als getView() funktioniert nur nach onCreateView() Sie kann es drinnen nicht benutzen onCreate() o onCreateView() Methoden des Fragments.

670voto

LeffelMania Punkte 12595

Sie müssen die Ansicht des Fragments aufblasen und die findViewById() über die View zurück.

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

158voto

Ankur Chaudhary Punkte 2669

Innerhalb Fragment Klasse erhalten Sie onViewCreated() Override-Methode, wo Sie immer Ihre Ansichten zu initialisieren, wie in dieser Methode erhalten Sie Ansicht Objekt, mit dem Sie Ihre Ansichten wie zu finden:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    view.findViewById(R.id.yourId).setOnClickListener(this);

    // or
    getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}

Denken Sie im Falle eines Fragments immer daran, dass onViewCreated() Methode wird nicht automatisch aufgerufen, wenn Sie null zurückgeben oder super.onCreateView() de onCreateView() Methode. Sie wird standardmäßig aufgerufen, wenn die ListFragment als ListFragment return FrameLayout standardmäßig.

Hinweis: Sie können die Fragmentansicht an jeder beliebigen Stelle in der Klasse abrufen, indem Sie getView() einmal onCreateView() erfolgreich ausgeführt worden ist. d.h.

getView().findViewById("your view id");

70voto

MattJenko Punkte 1198

Ich weiß, dass dies eine alte Frage ist, aber die vorherrschende Antwort lässt etwas zu wünschen übrig.

Die Frage ist nicht klar, was von den Mitgliedstaaten verlangt wird. imageView - Geben wir sie als Ansicht zurück oder speichern wir lediglich einen Verweis für später?

Wie auch immer, wenn die ImageView aus dem aufgeblasenen Layout kommt, wäre die korrekte Vorgehensweise die folgende:

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

54voto

xevincent Punkte 3614

Holen Sie sich zuerst die Fragmentansicht und holen Sie sich dann von dieser Ansicht Ihre ImageView.

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

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