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.

4voto

Ilya Gazman Punkte 29734

Gradle verwenden Skelett-Plugin werden automatisch die Viewholder-Klassen mit dem Verweis auf Ihr Layout generiert.

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyLayout myLayout = new MyLayout(inflater, container, false);
        myLayout.myImage.setImageResource(R.drawable.myImage);
        return myLayout.view;
    }
}

Angenommen, Sie hätten eine ImageView die in Ihrem my_layout.xml Datei, wird automatisch die Klasse myLayout für Sie erstellt.

3voto

mrSurprise Punkte 37

Sie können anrufen findViewById() mit dem Aktivität Objekt Sie erhalten in Ihrem public void onAttach(Activity activity) Methode innerhalb Ihres Fragments.

Speichern Sie die Aktivität zum Beispiel in einer Variablen:

En el Klasse der Fragmente : private Activity mainActivity; In der onAttach() Methode: this.mainActivity=activity;

Führen Sie schließlich jedes findViewById durch die vairable aus: mainActivity.findViewById(R.id.TextView);

3voto

Raja Jawahar Punkte 7334

Es gibt eine weitere Methode namens onViewCreated.

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ImageView imageView = (ImageView) view.findViewById(R.id.imageview1);
}

3voto

SwiftArchitect Punkte 45044

getView() funktioniert nur nach onCreateView() abgeschlossen, also rufen Sie es von onPostCreate() :

@Override
public void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    ImageView imageView = (ImageView) getView().findViewById(R.id.foo);
}

3voto

Wijay Sharma Punkte 410

Hier kommt der Layout-Inflator ins Spiel. Layout inflater ist eine Klasse, die uns in die Lage versetzt, die XML-Ansichten in Java-Code zu verwenden. Sie können also die Root-XML-Ansicht mit dem folgenden Code in die Variable v aufblasen. Und dann können Sie mit v die untergeordneten Ansichten der Stammansicht v finden.

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;
    }
}

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