Announcement

Collapse
No announcement yet.

Android Button Text wird nicht geändert/aktualisiert angezeigt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Android Button Text wird nicht geändert/aktualisiert angezeigt

    Hallo,
    Ich bin neu hier und hoffe, dass ich hier das richtige Forum gefunden habe.
    Ich habe folgendes Problem:
    Wir programmieren in der Schule eine Streaming App mit Chat, wobei ich hauptsächlich für den Chat Client zuständig bin. Dieser wird in Java für Android programmiert.
    So weit so gut, es funktioniert auch alles technisch so weit, jedoch habe ich einen Loginbutton der nach dem erfolgreichen Login seinen Text auf "Logout" ändern soll und bei erneutem klicken wieder auf "Login".
    Die Logik hinter dem Button funktioniert.
    Ich setzte am anfang den Button auf den Text "Login", das funktioniert noch, aber wenn ich den Text dann später verändern will, bekomme ich keinen Fehler aber der Text auf dem Button wird nicht geändert.
    Wenn ich mir nach dem Ändern des Textes mit
    Code:
     loginButton.getText();
    den Text hole wird auch der richtige Text zurückgegeben. Aber er wird eben nicht angezeigt.
    Ich habe jetzt einiges Gegoogelt aber irgendwie nichts wirklich hilfreiches gefunden, es wäre mega nett wenn mir jemand helfen könnte!
    Danke schonmal im vorraus.

    Liebe Grüße

    P.S.: Ich hänge hier mal die meiner Meinung nach wichtigen Teile des Codes an, wenn das zu wenig oder das falsche ist, einfach Bescheid sagen.

    Code:
    public class MainActivity extends AppCompatActivity {
        private ChatFragment chat;
    
        @Override    
        protected void onCreate(Bundle savedInstanceState) {          
            super.onCreate(savedInstanceState);        
            setContentView(R.layout.activity_main);
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.chatfragment, chat = new ChatFragment())
                    .commit();
    
            VerbindungManagement.getThread().start();
        }
    
        public void loginPressed(View v){
            chat.loginButtonPressed(v);
        }
    
        //[...]
    
    }
    Code:
    public class ChatFragment extends Fragment {
        private Button loginButton;
    
        //[...]
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            View view = inflater.inflate(R.layout.chat_fragment, container, false);
            loginButton = (Button) view.findViewById(R.id.id_buttonLogin);
            this.setLoginButtonText("Login");
            //[...]
            return view;
        }
    
        //[...]
    
        //Aufgerufen durch Klick auf loginButton
        public void loginButtonPressed(View view){
            //Prüft ob man schon eingelogt ist oder nicht
            if(VerbindungManagement.getAuthKey().isEmpty()) {
                //noch nicht eingelogt
                this.showLoginDialog();
            } else {
                //schon eingelogt
                VerbindungManagement.setAuthKey("");
                this.setLoginButtonText("Login");
            }
        }
    
        //[...]
    
        public void setLoginButtonText(String new_text){
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    loginButton.setText(new_text);
                }
            });
        }
    }
    Code:
    public class VerbindungManagement{
    
        //[...]
    
        private static ChatFragment chat;
    
        //[...]
    
        private static Thread thread = new Thread(){
            public void run(){
                //[...]
                switch (jsonIn.getString("Typ")) {
                    case "Auth":
                        authKey = jsonIn.getString("AuthKey");
                        if (!authKey.isEmpty()) {
                            chat.setLoginButtonText("Logout");
                        }
                        break;
    
                    //[...]
    
                }
    
                //[...]
            }
        };
    
        //[...]
    
        public static Thread getThread(){
            return thread;
        }
    
        public static void setChatinstance(ChatFragment chatfrag){
            chat = chatfrag;
        }
    }
    Zuletzt editiert von Preunicom; 16.05.2021, 11:50.

  • #2
    Stringvergleiche in Java erfolgen nicht mit == oder !=, sondern nit
    https://www.w3resource.com/java-tuto...ignorecase.php
    oder
    https://www.w3schools.com/java/ref_string_isempty.asp
    Christian

    Comment


    • Preunicom
      Preunicom commented
      Editing a comment
      Danke! Hab ich geändert.

  • #3
    Keiner eine Idee?

    Comment


    • #4
      Du hast beim debuggen festgestellt warum das nicht funktioniert?
      Zeige den Code, wie er jetzt ist
      Christian

      Comment


      • #5
        Beim Debuggen gab es keinen Fehler und der Text wird wie gesagt auch richtig zurückgeliefert, es ändert sich sogar die Größe des Buttons je nachdem was auf dem Button stehen sollte, aber der Text ändert sich eben nicht. Außerdem habe ich zwischenzeitlich versucht die Farbe zu ändern, das hat jedoch auch nicht funktioniert.
        Allerdings habe ich herrausgefunden, dass sich die Farbe und der Text aus ChatFragment onCreateView() ändern lassen, aber aus thread in VerbindungManagment nicht.
        Der Code ist in der Methode leicht verändert worden und wird dementsprechend statt mit:
        Code:
         chat.setLoginButtonText("Logout");
        mit
        Code:
         chat.setLoginButtonText(true);
        bzw
        Code:
         chat.setLoginButtonText(false);
        aufgerufen. Aber der Rest ist noch gleich.
        Code:
          
        public void setLoginButtonText(boolean logged_in){        
            getActivity().runOnUiThread(new Runnable() {            
                @Override            
                public void run() {                
                    if (logged_in) {                    
                       loginButton.setText("Logout");                
                    } else {                    
                       loginButton.setText("Login");                
                    }            
                }        
             });    
        }
        LG

        Comment


        • #6
          Du landest mit dem Debuuger und einem Breakpoint an der Stelle
          if (logged_in) {
          ?
          https://stackoverflow.com/questions/...ead-in-android
          Christian

          Comment


          • #7
            Ja genau, ich lande mit dem Breakpoint an der Stelle, und er geht auch in die richtige if Bedingung und führt die dann aus, man sieht es nur nicht

            Comment


            • #8
              Und ihn erst holen
              Button btn = (Button) findViewById(R.id.btn);
              btn.setText("Logout");
              Christian

              Comment


              • #9
                Das mach ich doch schon in onCreateView() und speichere mir das dann in ne variable? Muss ich das dann nochmal machen?

                Comment


                • #10
                  Eigentlich nicht.
                  Prüfe, ob das
                  loginButton = (Button) view.findViewById(R.id.id_buttonLogin);
                  wirklich der Button ist, den du willst.
                  Christian

                  Comment


                  • #11
                    Da sich der Button ja anpasst an die Länge des neuen Textes und ich mit loginButton.getText() auch den Text zurück bekomme der drinstehen müsste (aber nicht angezeigt wird), muss der Button ja eigentlich der richtige sein

                    Comment

                    Working...
                    X