Button Sichtbarkeiten oder Mitnahme von Variablen

  • Hey habe nochmal eine Frage bzw. können auch noch mehr werden ;)
    Und zwar möchte ich einen Delete Button erst sichbar machen nachdem ich einen anderen Button geklickt habe oder auch einfach den Delete Button in eine neue Activity übernehmen dann muss ich nicht mit der sichtbarkeit bzw. meinen Scrips spielen.
    Hier mein Quellcode (ich poste einfach mal alles)



    eintrag_layout.xml


    menu.xml


    styles.xml


    stings.xml

    Code
    <resources>
        <string name="app_name">ParseApp</string>
        <string name="basis_url">http://10.222.100.128/</string>
        <string name="hinzufuegenButton">Aktualisieren</string>
        <string name="neuerEintrag">Neuer Eintrag</string>
        <string name="neuer_eintrag">Neuer Eintrag</string>
        <string name="liste_start">Start</string>
    </resources>
  • MainActivity.java

  • Eintrag.java


    EintragAdapter.java

    DBRequestTask.java


  • So und die eigentlich Frage ist wie ich die Ausgelesende ID in einer Variable Speichern kann und wie ich den deleteButton über die App durch das klicken von einem anderem Button sichtbar bzw. wieder unsichtbar machen kann.

  • Hallo
    Das sichtbar und unsichtbar kannst du mit setVisibility( ) machen.
    Ist auch im XML verfügbar. android:visibility="visible"




    Wie immer hilft auch hier ein Blick in die Doku, zu View.



    https://developer.android.com/reference/android/view/View
    https://developer.android.com/…ew/View#setVisibility(int)



    Auch hier siehst du wie du zu der ID kommst mit findViewByID um das setVisibility anzuwenden.
    Da du noch mit dem veralteten XML Tag „onClick“ arbeitest hast du das auch nicht in Java benutzt.



    Mit etwas Google suche ist so etwas leicht zu finden. Und Doku lesen bildet auch.



    PS. Komisch das hier viele online waren aber keiner gibt dieses einfache Grundwissen weiter.

  • Danke für die Antwort das mit der ID habe ich schon hin bekommen kurz nachdem ich das Thema auf gemacht habe. Und bei der Visibility habe ich das Problem das ich die Buttons nicht normal mit findViewByID deklariere deswegen weiß ich nicht genau wie ich diesen Button ansprechen soll.



    Code
    public void doSelect(View view) {
            if (view.getTag() instanceof Eintrag) {
                eintrag = (Eintrag) view.getTag();
                (new DBRequestTask(MainActivity.this)).execute(
                        getString(R.string.basis_url) + "select.php", "ID",
                        Integer.toString(eintrag.getId()));
                rid = eintrag.getId();
                Toast.makeText(this,String.valueOf(rid),Toast.LENGTH_LONG).show();
            }
        }

    in der Methode möchte ich den Button der diese aufruft(selectButton) nach dem klick unsichtbar machen und einen anderen, den ich noch nicht eingefügt habe, sichtbar machen.

  • Zitat

    ich das Problem das ich die Buttons nicht normal mit findViewByID deklariere deswegen weiß ich nicht genau wie ich diesen Button ansprechen soll.

    Du musst die id schon mit findViewById erst mal suchen danach kannst du drauf zugreifen.


    FindViewById ist kein Deklariren sondern das suchen einer vorhandnen ID.
    Die wird beim laden des Layouts mit setContentView erstellt. Weißt du vorher nicht deshalb musst du sie zu Laufzeit suchen.


    Zitat

    in der Methode möchte ich den Button der diese aufruft(selectButton) nach dem klick unsichtbar machen und einen anderen, den ich noch nicht eingefügt habe, sichtbar machen.

    geht nicht der Button muss schon vorhanden sein. mache den im xml Layout unsichtbar dann kanst du ihn auch sichtbar machen.

  • haha Danke damit hat geklappt. Ich weiß nicht warum hatte das aber bereits so ausprobiert und auch als ich das eben abgetippt habe wurde das INVISIBLE nicht erkannt. Danach habe ich deinen Code mal kopiert und da wurde es erkannt...

    bt. setVisibility(View.INVISIBLE );


    Danke hast mir damit sehr geholfen :)

  • Ja das stimmt war aber der Meinung beides ausprobiert zu haben aber immerhin wird das ja jetzt erkannt. Jetzt ist das Problem das dieser Button sich in einem ListView befindet und wenn ich diesen dann betätige wird ein neues select Statement dargestellt wo der Button immer noch angezeigt wird.

  • Verstehe ich nicht ganz was du meist.
    Du hast doch den Datensatz durch klick auf den lösch Button gelöscht. Oder?
    Wenn du die liste neu aufrufst und den Adapter auch aktualisierst also auch die DB neu abfragst sollte er doch weg sein.
    Erkläre das das mal genauer.

  • Ich habe meine MainActivity so angepasst das der Button der vorerst für das löschen da war jetzt ein select Statement aufruft welches dann in das ListView eingetragen wird. Also wenn ich bei Katrin Oy auf die Lupe klicke kommt das ListView mit dem Eintrag PC 123456 wo die Lupe eigentlich unsichtbar(bzw. View.GONE) sein müsste. Da ich dort an der Stelle der Lupe einen anderen Button zum löschen einfügen will. Wenn ich Dann auf den zurück Button klicke welcher oben im Menü zu sehen ist klicke soll der Button (die Lupe) wieder sichtbar sein.

  • Du willst also wenn du auf die Lupe bei Katrin Oy Klickst das in der neuen Liste oder was ist das? Bei PC 123456 nicht die Lupe sondern ein anders Ikon angezeigt wirt.
    Wie kommst du zu der zweiten Anzeige?



    Eine Liste ist dynamisch wird immer wider neu eingelesen wenn du zurück gehst.
    Wenn du für jedes Item ein anders Symbol willst musst du das im Adapter der Liste machen.



    Wie kommst du zu der zweiten liste? Du löschst nicht etwa die ArrayListe die du dem Adapter übergeben hast. Fragst die DB neu ab und speicherst das wider in der Arrayliste und zeigst die liste an. Das wird so nicht gehen dafür solltest du schon zwei listen benutzen oder einen Dialog anzeigen in dem dann das PC1234567 steht.


    Wenn es so ist musst du schon im Adapter herausfinden was angezeigt wird damit du im Adapter auch das ein anderes Layout für die Items benutzen kannst.
    Das vorherige unsichtbar machen ist ja mit dem neu einlesen und zeichnen weg.
    Am einfachste zwei getrennte Listen.



    Zeige mal deinen Code.



    Was soll eigentlich passieren nachdem du die zweite Liste angezeigt hast? Ist dann der Datensatz noch vorhanden? Oder gelöscht.

  • Hey hatte ein wenig viel zu tum und kann mich jetzt erst wieder an die app setzten. Also zurzeit ist es so das ich in die gleiche Liste ein neues select schreibe. Ich hänge hier mal meine mainActivity an

  • Also wenn du die ArrayList des Adapters überschreibst wird das nicht gehen. Sagte ich auch bereits.
    Ok du hat uns die MainActivty gegen aber deinen Adapter nicht. Wenn es irgetwie gehen soll musst du das auch in deinem Adapter geben. Denn nur wird wirst du das lösen können.



    Was ich auch in deiner Activity vermisse ist ein Listener auf die Listview mit dessen Hilfe du auf einen Klick in der liste reagierst , kann aber auch sein das du das in deinem Adapter Klasse machst.



    Wenn es nach dem Daten neu laden auch anders ein soll musst du das auch in deiner DB speichern und im Adapter auch entsprechend bearbeiten.
    In Adapter werden nacheinander alle Items der Liste durchlaufen und dort musst du prüfen of es sichtbar sein soll oder nicht. Und zwar für jedes Item.



    Wenn du die Daten in der Main überschreist also in die Liste neue Daten einliest sind die alten Daten beim zurück weg.



    Das wirst du schon einen etwas größeren Aufwand im Adapter machen müssen. Wenn du an dieser nicht so sinnigen Variante festhalten willst.

  • Hab eh schon überlegt mir dafür eine neue Liste zu machen wollte nur meine Möglichkeiten überprüfen und mein Adapter ist weiter oben im Thema schon drin. Ich schaue mir das morgen mal in ruhe an und bedanke mich schon mal für deine Hilfe.


    Hier nochmal der Adapter:

  • Im Adapter in der getView holst du dir doch beide Ids von den Button. Also könstest du auch den einen unsichtbar machen wenn das im Daten bestand der Liste enthalten ist.
    Dazu brauchst du in der DB einen weiteren Eintrag(Spalte) in dem steht ob der Button angezeigt werden soll oder nicht. Das ja oder nein musst du im Klicklistener auch in die DB schreiben.



    Und in der getView auch abfragen und wenn nein dort steht auch unsichtbar machen. Nicht im Klicklistener.

  • Habe noch eine Frage und zwar wie kann ich hier: weitere Zeilen zum editieren einfügen?
    Hier ist der Aufruf davon:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!