Activity und Button

B

Benedd

Neues Mitglied
0
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:
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.
 
  • Danke
Reaktionen: Benedd
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:
  • Danke
Reaktionen: Benedd
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:
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();
			}
		});
	}
}
 
  • Danke
Reaktionen: Benedd
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();
                    

                      
                     

                 }

            });            
            
//----------------------------------------------------------------------- 
            
    
        }
    }
 

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
313
swa00
swa00
MES
Antworten
10
Aufrufe
788
MES
MES
C
Antworten
8
Aufrufe
1.111
swa00
swa00
Zurück
Oben Unten