5 Stimmen

Android: Wie funktioniert findViewById(R.id.xxx) in einer Klasse, die von der View-Klasse erbt/erweitert wird?

Ich habe folgendes Problem: Ich möchte eine benutzerdefinierte Ansicht (custom_view.xml und die zugehörige Klasse CustomView.java) zu meiner Hauptaktivität hinzufügen.

Ich mache also Folgendes:

1) In meiner Hauptaktivität (verlinkt mit main.xml):

CustomView customView = new CustomView(this);
mainView.addView(customView);

2) In meiner Klasse CustomView.java (die ich mit custom_view.xml verknüpfen möchte):

public class CustomView extends View {

public CustomView(Context context)
{
super(context);

/* setContentView(R.layout.custom_view); This doesn't work here as I am in a class extending from and not from Activity */

TextView aTextView = (TextView) findViewById(R.id.aTextView); // returns null

///etc....
}

}

Mein Problem ist, dass aTextView gleich Null bleibt... Es scheint eindeutig an der Tatsache zu liegen, dass meine custom_view.xml nicht mit meiner CustomView.java Klasse verknüpft ist. Wie kann ich diese Verknüpfung herstellen? Ich habe es mit setContentView(R.layout.custom_view) versucht, aber es funktioniert nicht (Kompilierungsfehler), da meine Klasse von der Klasse View und nicht von der Klasse Activity abgeleitet ist.

Vielen Dank für Ihre Hilfe!

0 Stimmen

Sollten Sie Ihr xml nicht irgendwann aufblasen?

0 Stimmen

Danke njzk2. Es scheint, dass ich meine xml aufblasen sollte. Wie kann ich das tun? (Danke für Ihre Antwort, falls ich keinen Blog zu diesem Thema finde)

12voto

PH7 Punkte 3886

Wenn ich Sie richtig verstehe, versuchen Sie, eine benutzerdefinierte Ansicht aus einer Layoutdatei (R.layout.custom_view) zu erstellen. Du willst eine Textansicht aus dieser Layoutdatei finden. Ist das richtig?

Wenn ja, müssen Sie die Layout-Datei mit dem Kontext aufblasen, den Sie haben. Dann können Sie die Textansicht in der Layoutdatei finden.

Versuchen Sie dies.

LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.custom_view, null);
TextView aTextView = (TextView) v.findViewById(R.id.aTextView);

1voto

Pontios Punkte 2193

Ich würde Ihnen empfehlen, dies zu versuchen:

TextView aTextView = (TextView) ((Activity)this.getContext()).findViewById(R.id.aTextView);

Bei mir hat es funktioniert!!!

0voto

Vinay Punkte 2385

Versuchen Sie, die customView aufzublasen.

Zweitens, versuchen Sie (ich nehme an, dass aTextView id in Seite CustomView vorhanden ist)

TextView aTextView = (TextView) mainView.findViewById(R.id.aTextView);

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