1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Activity und Button

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Benedd, 04.02.2011.

  1. Benedd, 04.02.2011 #1
    Benedd

    Benedd Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    11.11.2010
    Phone:
    LG GT540
    Hallo zusammen,

    bin noch nicht mit Java vertraut und hab da ein kleines Problem.

    Aufbau: zwei Activitys A und B

    Activity A / main.xml / Button01 = Gone (nicht sichtbar) / Menu mit Aufruf zur Activity B
    Activity B / main2.xml / EditText01 und Button02

    Nun möchte ich mit der Eingabe eines Textes in EditText01 und durch Button02 (onClick) event in der Activity
    B, den Button01 in der Activity A sichtbar machen und die Buttonbeschriftung ändern.

    Danke vorab, für eine Lösung.

    Gruß Benedd
     
    Zuletzt bearbeitet: 05.02.2011
  2. v Ralle v, 04.02.2011 #2
    v Ralle v

    v Ralle v Android-Lexikon

    Beiträge:
    913
    Erhaltene Danke:
    199
    Registriert seit:
    27.08.2010
    Probier mal:

    Button01.setText("...");
    Button01.setVisibility(Button.VISIBLE);

    Wie du an Button01 ran kommst, musst du dir überlegen. Bin mir gerade nicht sicher, ob man mit findViewByID(R.id.Button01); in der Activity B den Button aus der aus dem Layout main.xml bekommt (einfach mal ausprobieren). Ansonsten hier nochmal posten.
     
    Benedd bedankt sich.
  3. Zoopa, 04.02.2011 #3
    Zoopa

    Zoopa Android-Experte

    Beiträge:
    599
    Erhaltene Danke:
    173
    Registriert seit:
    28.07.2010
    Ich habe auch gerade keine Ahnung, ob man einfach eine Referenz auf den Button einer anderen Activity holen kann und dann einfach die Methoden aufruft, deshalb hier ein allgemeiner Weg, wie man Werte von einer Activity an eine andere übergibt:

    Hier eine kurze Beschreibung von gestern, damit ichs nicht nochmal neu schreiben muss ;)

    Bei dir ist es zwar nicht ganz dasselbe, da du Werte von einer Activity an eine andere zurückgeben willst, aber das funktioniert vom Prinzip her eigentlich gleich, du erhälst am Schluss auch einen Intent mit deinen Werten / Bundle drin.

    dafür musst du in Activity A die Activity B mit
    Code:
    startAcitivtyForResult(Intent intent, int requestCode)
    
    starten (anstatt mit startActivity(Intent), wie du es jetzt vermutlich hast). Der requestCode kann dabei eine beliebige Zahl >=0 sein, die dir nachher hilft, zu unterscheiden, von welchem startActivityForResult-Aufruf das Resultat stammt.

    In Activity B kannst du dann irgendwo (z.B. im OnClick-Handler des Buttons) einen Intent mit dem Resultat erzeugen und dann die Activity statt nur mit finish() einfach so beenden:

    Code:
    Bundle stats = new Bundle();
    
    //Falls der Button angezeigt werden soll -> True, sonst -> False
    stats.putBoolean("show_button", true); 
    
    setResult(RESULT_OK, stats);
    finish();
    
    Zusätzlich musst du in Activity A noch die Methode

    Code:
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    
    überschreiben. Diese wird dann automatisch aufgerufen, wenn von einer anderen Activity ein Resultat zurückgegeben wird.
    Der requestCode ist wieder wie oben der Wert, den du übergeben hast und der dir hilft, zu entscheiden, von welchem Aufruf das Resultat kam und der resultCode ist eine Variable, die anzeigt, wie das Resultat war (RESULT_OK, RESULT_CANCELED..) etwa so:

    Code:
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
    
        if(requestCode == [B]1[/B]){
           //Resultat kommt vom Aufruf startActivityForResult(intent, [B]1[/B])
        }
        else if(requestCode == [B]239[/B]){
           //Resultat kommt vom Aufruf startActivityForResult(intent, [B]239[/B])
        }
    
        if(resultCode == RESULT_OK){
            //...
        }
    
    und irgendwo in dieser Methode kannst du dann dein Button sichtbar machen und die Beschriftung ändern, wie Ralle oben schon beschrieben hat:

    Code:
    Bundle bundle = data.getExtras();
    Boolean showButton = bundle.getBoolean(”show_button″);
    
    if(showButton == true){
        Button01.setText("...");
        Button01.setVisibility(Button.VISIBLE);
    }
    
     
    Zuletzt bearbeitet: 04.02.2011
    Benedd bedankt sich.
  4. Benedd, 05.02.2011 #4
    Benedd

    Benedd Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    11.11.2010
    Phone:
    LG GT540
    Vielen Dank für die Antwort,

    hab das mal alles soweit zusammengebastelt wie ich es verstanden habe. Kann die App zwar soweit ohne Fehler aufrufen, der gewünschte Effekt bleibt aber aus. Glaube das durch den umgekehrten Ablauf der Code nicht so funktioniert wie er soll. (irgendwas durcheinander gebracht) :huh:

    Den vollständigen Code habe ich unten nochmal aufgeführt, ein Lösungsvorschlag wäre super.

    Gruß Benedd


    1. Vorher / Activity A / main.xml :

    Activity A 1.JPG

    2. Activity B / main2.xml

    Activity B.JPG

    3. Nachher / Activity A / main.xml

    Activity A 2.JPG


    ---------------------------------------------------


    Activity A:

    Code:
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    
    
    
    
    public class ActivityA extends Activity {
        
    //-----------------------------------------------------------------------
        
        // Deklaration Button
    
        private Button  Button01_anzeigen;
        
    
    //-----------------------------------------------------------------------
        
    
        /** Called when the activity is first created. */
        
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
         
         
    //----------------------------------------------------------------------- 
            
            // Definition Button
            
            Button01_anzeigen = (Button) findViewById(R.id.Button01);
            
            
    //-----------------------------------------------------------------------     
            
            // Definition Menu Button - (Aufruf der Activity B)
            
            Button btActivityB = (Button) findViewById(R.id.menu_button_activity_B); 
            btActivityB.setOnClickListener( new View.OnClickListener() { 
         
                public void onClick(final View view) {
                    
                    
                    // Wenn ich den Code einfüge erhalte immer eine Fehlermeldung 
                    // App läst sich garnicht erst starten
                    
                    startAcitivtyForResult(Intent intent, int requestCode);
                    
                    
    
                    // Wenn ich den Code benutze dann funktiniert es
                    // App lässt sich starten und ich kann die Activity B aufrufen
                    
                    Intent intent = new Intent(ActivityA.this, ActivityB.class);
                    startActivity(intent);
                     
    
                    // Creating Toast
                     
                    Toast.makeText(ActivityA.this, "Sie haben Activity B ausgewählt", 
                    Toast.LENGTH_SHORT).show();   
                     
                 }
    
            });         
            
        }  
        
        
    //-----------------------------------------------------------------------
         
          
        // resultCode - Activity Resultat - (Rückgabewerte)
        
        protected void onActivityResult(int requestCode, int resultCode, Intent data){
    
            if(requestCode == 1){
                
               //Resultat kommt vom Aufruf startActivityForResult(intent, 1)
                
                Bundle databundle = data.getExtras();
                boolean showButton = databundle.getBoolean("show_button");
    
                
                if(showButton == true){
                    Button01_anzeigen.setText(" ");
                    Button01_anzeigen.setVisibility(View.VISIBLE);
                    
                }
                
            }
            
          
    
                
        //-----------------------------------------------------------------------
                
      
        }
    }
    
    
    Activity B:

    Code:
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    
    public class ActivityB extends Activity {
            
        
    
            /** Called when the activity is first created. */
            
            
            
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main2);
                
    //-----------------------------------------------------------------------     
                
                // Definition Menu Button - (zurück zu Activity A)                
                
                Button btActivityA = (Button) findViewById(R.id.Button02); 
                btActivityA.setOnClickListener( new View.OnClickListener() { 
    
                    public void onClick(final View view) {
                         
                    
                       Intent my_intent = new Intent(ActivityB.this, ActivityA.class);
                        
    
                        Bundle status = new Bundle();
    
                        //Falls der Button angezeigt werden soll -> True, sonst -> False
                        
                        status.putBoolean("show_button", true); 
    
                        setResult(RESULT_OK);
                        finish();
                        
    
                        my_intent.putExtras(status);
                        
                        
                        
                        // Creating Toast
                         
                        Toast.makeText(ActivityB.this, "Sie haben Activity A ausgewählt", 
                        Toast.LENGTH_SHORT).show(); 
                         
                         
    
                     }
    
                
    
                });            
                
    
                
        
            }
        }
    
    
     
    Zuletzt bearbeitet: 11.02.2011
  5. Zoopa, 06.02.2011 #5
    Zoopa

    Zoopa Android-Experte

    Beiträge:
    599
    Erhaltene Danke:
    173
    Registriert seit:
    28.07.2010
    naja mein Code war zum Teil nicht gedacht zum 1 zu 1 kopieren ;) Aber an 2 kleinen Stellen angepasst und die Reihenfolge ein bisschen geändert (z.B. finish() erst am Schluss aufrufen), und dann funktionierts.

    Code:
    public class ActivityA extends Activity {
        
    //-----------------------------------------------------------------------
        
        // Deklaration Button
    
        private Button  Button01_anzeigen;
        
    //-----------------------------------------------------------------------
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
    //----------------------------------------------------------------------- 
            
            // Definition Button
            
            Button01_anzeigen = (Button) findViewById(R.id.Button01);
          
    //-----------------------------------------------------------------------     
            
            // Definition Menu Button - (Aufruf der Activity B)
            
            Button btActivityB = (Button) findViewById(R.id.menu_button_activity_B); 
            btActivityB.setOnClickListener( new View.OnClickListener() { 
         
                public void onClick(final View view) {
    
                    Toast.makeText(getApplicationContext(), "Sie haben Activity B ausgewählt", Toast.LENGTH_SHORT).show();   
                	
                    Intent intent = new Intent(ActivityA.this, ActivityB.class);
                    startActivityForResult(intent, 1);
                 }
            });         
            
        }  
        
    //-----------------------------------------------------------------------
         
        // resultCode - Activity Resultat - (Rückgabewerte)
        
        protected void onActivityResult(int requestCode, int resultCode, Intent data){
    
            if(requestCode == 1){
                
               //Resultat kommt vom Aufruf startActivityForResult(intent, 1)
                
                Bundle databundle = data.getExtras();
                boolean showButton = databundle.getBoolean("show_button");
    
                
                if(showButton == true){
                    Button01_anzeigen.setText(" ");
                    Button01_anzeigen.setVisibility(View.VISIBLE); 
                }
            }
             
        //-----------------------------------------------------------------------
               
        }
    }
    
    Code:
    public class ActivityB extends Activity {
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main2);
    
    		// -----------------------------------------------------------------------
    
    		// Definition Menu Button - (zurück zu Activity A)
    
    		Button btActivityA = (Button) findViewById(R.id.Button02);
    		btActivityA.setOnClickListener(new View.OnClickListener() {
    
    			public void onClick(final View view) {
    
    				// Creating Toast
    				Toast.makeText(getApplicationContext(), "Sie haben Activity A ausgewählt", Toast.LENGTH_SHORT).show();
    
    				Intent my_intent = new Intent(ActivityB.this, ActivityA.class);
    
    				Bundle status = new Bundle();
    				status.putBoolean("show_button", true);
    				my_intent.putExtras(status);
    
    				setResult(RESULT_OK, my_intent);
    				finish();
    			}
    		});
    	}
    }
    
     
    Benedd bedankt sich.
  6. Benedd, 11.02.2011 #6
    Benedd

    Benedd Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    11.11.2010
    Phone:
    LG GT540
    Danke nochmal für die Antwort,


    muss mir das immer erst soweit Kopieren um dann den Zusammenhang und Ablauf zuverstehen. Hab das ganze jetzt soweit hinbekommen, so das die Daten von Activity A nach B übermittelt werden und sogar die Buttonbeschriftung geändert wird. Aber wenn ich auf der Activity B bin und nicht den zurück Button drücke sondern mit der zurück-taste am Telefon zurück zur Activity A will stürzt mir die App ab.
    Lässt sich das irgendwie verhindern oder ist da noch ein Fehler im Code. (Code siehe unten)


    Gruß Benedd



    Activity A:

    Code:
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class ActivityA extends Activity {
    //-----------------------------------------------------------------------
        
        // Deklaration Button
    
        private Button  Button01_anzeigen;
        
    //-----------------------------------------------------------------------
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
    //----------------------------------------------------------------------- 
            
            // Definition Button
            
            Button01_anzeigen = (Button) findViewById(R.id.Button01);
            
    //-----------------------------------------------------------------------     
            
            // Definition Menu Button - (Aufruf der Activity B)
            
            Button btActivityB = (Button) findViewById(R.id.Menu_Button_Activity_B); 
            btActivityB.setOnClickListener( new View.OnClickListener() { 
         
                public void onClick(final View view) {
    
                    // Creating Toast
                    
                    Toast.makeText(getApplicationContext(), "Sie haben Activity B ausgewählt",
                    Toast.LENGTH_SHORT).show();
                    
                    
                    // Aufruf der Activity (B)
                    
                    Intent intent = new Intent(ActivityA.this, ActivityB.class);
                    startActivityForResult(intent, 1);
    
       
                    
                 }
            });         
            
        }  
        
    //-----------------------------------------------------------------------
         
        // resultCode - Activity Resultat - (Rückgabewerte)
        
        protected void onActivityResult(int requestCode, int resultCode, Intent data){
    
              if(requestCode == 1){
    
                //Resultat kommt vom Aufruf startActivityForResult(intent, 1)
                  
                  
                //Button 01
                  
                //TextView Button Beschriftung
                  String MyValue = (data.getExtras().getString("MyValue"));
                  Button01_anzeigen.setText(String.valueOf(MyValue));
    
                //Button Sichtbarkeit
                Button01_anzeigen.setVisibility(View.VISIBLE);
                
               }
              
                  // Rückgabe OK wird ein Toast angezeigt. */
             
              if (resultCode == Activity.RESULT_OK) {
            
                   //...
    
            }
             
        //-----------------------------------------------------------------------
               
        }
    }
    Activity B:

    Code:
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class ActivityB extends Activity {
       
        
            /** Called when the activity is first created. */
            
            
            
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main2);
                
    //-----------------------------------------------------------------------     
                
                // Definition Menu Button - (zurück zu Activity A)                
                
                Button btActivityA = (Button) findViewById(R.id.Menu_Button_Activity_A); 
                btActivityA.setOnClickListener( new View.OnClickListener() { 
    
                    public void onClick(final View view) {
                         
                        // Creating Toast
                        
                        Toast.makeText(getApplicationContext(), "Sie haben Activity A ausgewählt",
                        Toast.LENGTH_SHORT).show(); 
                        
                        
                        // Erzeuge ein Intent für die Rückgabe.
                        
                        Intent intent = new Intent();
                        
                        // Mit putExtra kann ein Bündel an Daten übergeben werden.
    
                         EditText eingabe = (EditText)findViewById(R.id.EditText01);
                         String eingegeben = eingabe.getText().toString();
    
                         intent.putExtra("MyValue", eingegeben);
      
                         
                        // Setzt die Rückgabe und schließe das Activity 
                         
                        setResult(Activity.RESULT_OK, intent);
                        finish();
                        
    
                          
                         
    
                     }
    
                });            
                
    //----------------------------------------------------------------------- 
                
        
            }
        }
     

Diese Seite empfehlen