findviewByID von einem anderem Layout

  • Antworten:24
Marcus Koch
  • Forum-Beiträge: 15

22.11.2018, 19:25:08 via Website

Guten abend, ich habe hier schon ein wenig gesucht und gelesen. Aber nicht das Richtige gefunden.

Also ich habe eine home activity in der ich ein navigation drawer menu erstellt habe. in dem menu habe ich eine headerlayout eingefügt. Nun will ich über die home.java den textview in der headerlayout mit settext ansprechen. Bekomme aber nur eine POINT NULL

setContentView(R.layout.activity_home);

    tvheaderdate =(TextView) findViewById(R.id.textView3);
    tvheaderdate.setText("Nutzertest");

Das textView3 befindet sich in der headerlayout! Und ich will es von der home.java ansprechen. Welche möglichkeit habe ich noch? Danke

image

image

Kommentieren
Jokel
  • Forum-Beiträge: 1.530

22.11.2018, 19:36:45 via Website

Hallo
Erstmal Wilkommen im Forum.

Ich denke du bist in einem Fragment.
In einem Fragment brauchst du die Activty um mit findViewById arbeiten zu können.

tvheaderdate =(TextView) getActivity().findViewById(R.id.textView3);
tvheaderdate.setText("Nutzertest");

Denn das Layout wird ja in der Activity eingeblendet .

oder willst du in der Activity auf das Fragment zugreifen?

— geändert am 22.11.2018, 19:46:22

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

22.11.2018, 20:01:03 via Website

Ja ich möchte von der home activity auf das headerlayout fragment zugreifen und die textview dort bearbeiten

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

22.11.2018, 20:06:00 via Website

Wieso von der activity aus und nicht in der Fragment klasse?
Wo man das normalerweise macht?

PS
Eigentlich wird in einer fragment Klasse nicht das Layout mit setContentView geladen. Denke du hast gar keine richtigen fragment Klasse.
Normalerweise hat man für jeden Eintrag im navdrawer eine fragment Klasse.
Da du dein layout mit
setContentView(R.layout.activity_home);
Lädst denke ich das du das nicht so hast.
Auch hat somit jedes Fragment ein eigenes Layout.

Wenn du etwas im fragment aus der Activity ändern willst solltest du erstmal prüfen. Ob das fragment überhaup geladen ist.
Und ich würde da mit callback Methoden zwischen der activity und fragment arbeiten.

Erzähle uns mal warum du es aus der Activity machen willst.

Wenn es nur um den Namen geht könntest du den auch beim Aufruf des fragment im bundle mit geben.

— geändert am 22.11.2018, 21:39:24

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

22.11.2018, 22:52:17 via Website

Ja srry ich bin noch sehr unerfahren auf dem gebiet :/

Hier mal das tutorial video, mit dem ich es auch gemacht habe. Dort sagt er das es kein Problem ist, obwohl es ein extra layout ist. Nur bekomm ich da eine null object reference.

Hier das video. ab minute 24:39 geht es genau darum.

youtube . com / watch?v=bXKtM2belwo

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

22.11.2018, 23:49:05 via Website

Ja das sollte gehen ist aber nicht das Fragment sondern das layout des navdrawers.
Dann zeitge mal das layout von dem hader.
Ob es dort überhaupt die id gibt.

Auf deinem Bild kann ich keine zweite textview erkennen.
Deshalb würde ich gern das layout sehen.

Da haben wir anfänglich etwas aneinander vorbei geredet. Sorry.

— geändert am 23.11.2018, 00:07:08

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 10:04:16 via Website

Ok. Ja ich hab noch viel zu lernen :D ist eben nicht so easy wie php, mysql, html, jquery bzw ajax :D

So hab mal von allem screenshots gemacht. Vllt siehst du ja den fehler

Hier das header Layout
image

image

Und hier die activity

image

Und hier der fehler code

image

Der fehlercode Zeile 53 ist eigentlich zeile 49
Habe nur den code etwas zusammen geschoben ohne viele leerzeilen
Gruß

— geändert am 23.11.2018, 10:08:23

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.11.2018, 10:46:42 via Website

Hallo zeige mal das Layout für die Aativity "activity_home.xml" aber bitte nicht als Bild da last sich schlecht lesen, sondern als Text im Code Block.
Eigentlich müsste es gehen wenn wirklich dein Haderlayout im Actvitylayout eingebunden ist und nicht ein anderes, das kann ich nicht sehen. Denn auf deinem Bild am Anfang ist deine zweite TextView mit dem Inhalt "Textview" nicht zusehen.
Deshalb denke Ich das es nicht im Layout ist.
Die Datei ist zwar im Projekt und somit wird auch die Id vom Compiler gefunden und er zeigt dir keinen Fehler, aber zu Laufzeit ist das Layout nicht eingebunden und somit wird die Id nicht gefunden. Deshalb zeige das Layout.
Wenn du den im Xml Layout gesetzten Text nicht siehst stimmt damit schon was nicht.
android:text=“TextView“ muss zu sehen sein ist es aber nicht.
Du hast bestimmt zwei Hader Dateien

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 10:51:46 via Website

Ok. Hier mal das layout vom home.

image

image

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.11.2018, 11:01:33 via Website

Hallo ich nochmal

Wieso erstellst du die id doppelt.
Deine erste textview willst vor der zweiten setzen "above" ist ja ok aber nicht neu erstellen mit pluss. Schaue dir das nochmal in dem Video an wie man im relativlayout einen Bezug zu einem anderen Element macht.
Somit hast du die id doppelt im layout das geht nicht.

Da du nur Bilder geschickt hast konnte ich das nicht gut erkennen. Beim nächsten mal bitte in Text Form.

Ps ich habe nicht gesehen das du einen neuen post gemacht hast .ich beziehe mich hier auf den vorherigen.

— geändert am 23.11.2018, 11:07:16

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 11:10:10 via Website

So hat er das aber in seinem Projekt auch gemacht. ist bei beiden das + davor
Oder sehe ich da was falsch?

image

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.11.2018, 11:21:41 via Website

Ja das ist richtig aber deine view wird trotzdem nicht angezeigt und da sitzt der Fehler.
Er setzt aber die zweite wiev im text vor die erste in der Anzeige und du umgekehrt.
Wenn der Parser zur Laufzeit durch den Code geht kennt er die id noch nicht.
Und zeigt es somit wohl nicht an.

Da du nur Bilder schickst kann Mann es auch nicht im Designer testen. Nur trocken durch denken.
Noch mal sage ich bitte keine Bilder.

— geändert am 23.11.2018, 11:50:59

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 11:26:33 via Website

Doch es ist da

image

Bei dem bild ganz oben war nur kein text hinterlegt.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.11.2018, 11:45:44 via Website

Ja im Designer und in echt?
Warum machst du es nicht mal so wie er?
Er gibt ja auch den Quellcode mit.

Vorallen las mal deine ressourcen neu übersetzen mit build/clear.

— geändert am 23.11.2018, 11:54:29

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 12:46:36 via Website

Habe es jetzt alles so wie er gemacht. auch in der reihenfolge wie es im video ist. Trotzdem crash beim aufrufen der home activity. NullPointerException

hab es auch gecleart.

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 12:55:08 via Website

selbst meine home_activity.xml ist komplett gleich mit seiner... komisch.

Soll ich dir das Ganze projekt mal auf meinen server laden?

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.11.2018, 13:19:15 via Website

Kannst du machen aber ob ich jetzt am we dazu komme kann ich nicht versprechen. Frühestens am Sonntag abend.

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 13:53:00 via Website

An Der sdk Version kann es nicht liegen? Sein Video ist ja schon etwas älter

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.11.2018, 14:42:01 via Website

Wie hast du denn das Projekt erstell?
Hast du seines geladen oder selber ein Standart projekt erstellt und die datein editiert?
Wenn du seines geladen hast , hast du auch die sdk version die er da benutzt im sdk Manager installiert.
Wie sieht den dein gradle file aus.

Versuche doch mal ein Standart project und editiere die datein. Dann solte auch das gradle passen.
Hast du auch die Design Lib mit importiert?

— geändert am 23.11.2018, 14:45:55

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 17:58:23 via Website

Nein. Habe es in mein vorhandenes Projekt erweitert.

Bin gegen 20 Uhr zuhause. Und kann dir dann die Daten hier Posten.

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 19:00:03 via Website

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "de.webcustom.serverabfrage"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding.enabled = true
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:design:27.1.1'
}
Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.11.2018, 19:18:45 via Website

Sieht ok aus

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

23.11.2018, 21:03:11 via Website

also habe sein projekt herunter geladen und geöffnet. mit der sdk version 27 und da ist genau das selbe! also muss sich was von 22 auf 27 beim findview geändert haben. Geht das jetzt mit data binding?

Hilfreich?
Kommentieren
Marcus Koch
  • Forum-Beiträge: 15

24.11.2018, 00:00:44 via Website

So nun habe ich es hinbekommen. Im ersten Test lief es jedenfalls.

LayoutInflater inflater = (LayoutInflater)this.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.headerlayout, null);
    TextView textView = (TextView) navigationView.getHeaderView(0).findViewById(R.id.textViewDate);
    textView.setText("ciao");
Hilfreich?
Jokel
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

25.11.2018, 15:01:15 via Website

Ja du scheinst recht zuhaben.
Ab api 23 scheint es anders zu sein.
Bis Sdk version 22 gehtes wie im video ab 23 nicht mehr.

Hilfreich?
Marcus Koch
Kommentieren