Réponses:
Facile.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);
Les extras sont récupérés de l'autre côté via:
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
String value = intent.getStringExtra("key"); //if it's a string you stored.
}
N'oubliez pas d'ajouter votre nouvelle activité dans AndroidManifest.xml:
<activity android:label="@string/app_name" android:name="NextActivity"/>
CurrentActivity.this.startActivity(myIntent)
et startActivity(myIntent)
?
Créez une intention pour une activité ViewPerson et transmettez le PersonID (pour une recherche de base de données, par exemple).
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
Ensuite, dans ViewPerson Activity, vous pouvez obtenir le paquet de données supplémentaires, assurez-vous qu'il n'est pas nul (au cas où vous ne transmettez parfois pas de données), puis récupérez les données.
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
personID = extras.getString("PersonID");
}
Maintenant, si vous devez partager des données entre deux activités, vous pouvez également avoir un singleton global.
public class YourApplication extends Application
{
public SomeDataClass data = new SomeDataClass();
}
Appelez-le ensuite dans n'importe quelle activité en:
YourApplication appState = ((YourApplication)this.getApplication());
appState.data.CallSomeFunctionHere(); // Do whatever you need to with data here. Could be setter/getter or some other type of logic
Les réponses actuelles sont excellentes mais une réponse plus complète est nécessaire pour les débutants. Il existe 3 façons différentes de démarrer une nouvelle activité dans Android, et ils utilisent tous la Intent
classe; Intention | Développeurs Android .
onClick
attribut du bouton. (Débutant)OnClickListener()
via une classe anonyme. (Intermédiaire)switch
instruction. (Pro)Voici le lien vers mon exemple si vous souhaitez suivre:
onClick
attribut du bouton. (Débutant)Les boutons ont un onClick
attribut qui se trouve dans le fichier .xml:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="goToAnActivity"
android:text="to an activity" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="goToAnotherActivity"
android:text="to another activity" />
En classe Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
public void goToAnActivity(View view) {
Intent intent = new Intent(this, AnActivity.class);
startActivity(intent);
}
public void goToAnotherActivity(View view) {
Intent intent = new Intent(this, AnotherActivity.class);
startActivity(intent);
}
Avantage : facile à réaliser à la volée, modulaire et peut facilement définir plusieurs onClick
s pour la même intention.
Inconvénient : lisibilité difficile lors de la révision.
OnClickListener()
via une classe anonyme. (Intermédiaire)C'est lorsque vous définissez un séparé setOnClickListener()
pour chacun button
et remplacez chacun onClick()
avec sa propre intention.
En classe Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), AnActivity.class);
view.getContext().startActivity(intent);}
});
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), AnotherActivity.class);
view.getContext().startActivity(intent);}
});
Avantage : facile à réaliser à la volée.
Inconvénient : il y aura beaucoup de classes anonymes qui rendront la lisibilité difficile lors de la révision.
switch
instruction. (Pro)C'est lorsque vous utilisez une switch
instruction pour vos boutons dans leonClick()
méthode pour gérer tous les boutons de l'activité.
En classe Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button1:
Intent intent1 = new Intent(this, AnActivity.class);
startActivity(intent1);
break;
case R.id.button2:
Intent intent2 = new Intent(this, AnotherActivity.class);
startActivity(intent2);
break;
default:
break;
}
Avantage : gestion facile des boutons car toutes les intentions des boutons sont enregistrées dans une seule onClick()
méthode
Pour la deuxième partie de la question, la transmission de données, veuillez consulter Comment puis-je transmettre des données entre les activités dans l'application Android?
Lorsque l'utilisateur clique sur le bouton, directement à l'intérieur du XML comme ça:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextButton"
android:onClick="buttonClickFunction"/>
En utilisant l'attribut, android:onClick
nous déclarons le nom de la méthode qui doit être présent sur l'activité parent. Je dois donc créer cette méthode au sein de notre activité comme ça:
public void buttonClickFunction(View v)
{
Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
startActivity(intent);
}
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);
startActivity(in);
This is an explicit intent to start secondscreen activity.
Emmanuel,
Je pense que les informations supplémentaires doivent être mises avant de commencer l'activité, sinon les données ne seront pas encore disponibles si vous y accédez dans la méthode onCreate de NextActivity.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
À partir de l'activité d'envoi, essayez le code suivant
//EXTRA_MESSAGE is our key and it's value is 'packagename.MESSAGE'
public static final String EXTRA_MESSAGE = "packageName.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
....
//Here we declare our send button
Button sendButton = (Button) findViewById(R.id.send_button);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//declare our intent object which takes two parameters, the context and the new activity name
// the name of the receiving activity is declared in the Intent Constructor
Intent intent = new Intent(getApplicationContext(), NameOfReceivingActivity.class);
String sendMessage = "hello world"
//put the text inside the intent and send it to another Activity
intent.putExtra(EXTRA_MESSAGE, sendMessage);
//start the activity
startActivity(intent);
}
À partir de l'activité de réception, essayez le code suivant:
protected void onCreate(Bundle savedInstanceState) {
//use the getIntent()method to receive the data from another activity
Intent intent = getIntent();
//extract the string, with the getStringExtra method
String message = intent.getStringExtra(NewActivityName.EXTRA_MESSAGE);
Ensuite, ajoutez simplement le code suivant au fichier AndroidManifest.xml
android:name="packagename.NameOfTheReceivingActivity"
android:label="Title of the Activity"
android:parentActivityName="packagename.NameOfSendingActivity"
Essayez cette méthode simple.
startActivity(new Intent(MainActivity.this, SecondActivity.class));
La façon de démarrer de nouvelles activités consiste à diffuser une intention, et il existe un type spécifique d'intention que vous pouvez utiliser pour transmettre des données d'une activité à une autre. Ma recommandation est de consulter les documents des développeurs Android liés aux intentions ; c'est une mine d'informations sur le sujet, et a aussi des exemples.
Première activité
startActivity(Intent(this, SecondActivity::class.java)
.putExtra("key", "value"))
Deuxième activité
val value = getIntent().getStringExtra("key")
Suggestion
Mettez toujours les clés dans un fichier constant pour une manière plus gérée.
companion object {
val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
.putExtra(PUT_EXTRA_USER, "value"))
Le démarrage d'une activité à partir d'une autre activité est un scénario très courant parmi les applications Android.
Pour démarrer une activité, vous avez besoin d'un objet Intent .
Un objet d'intention prend deux paramètres dans son constructeur
Exemple:
Par exemple, si vous avez deux activités, dites HomeActivity
et DetailActivity
et vous voulez commencer à partir DetailActivity
de HomeActivity
(HomeActivity -> DetailActivity).
Voici l'extrait de code qui montre comment démarrer DetailActivity à partir de
AccueilActivité.
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
Et vous avez terminé.
Revenant à la partie clic du bouton.
Button button = (Button) findViewById(R.id.someid);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
}
});
Démarrez une autre activité à partir de cette activité et vous pouvez également passer des paramètres via Bundle Object.
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "xyz@gmail.com");
startActivity(intent);
Retrouver des données dans une autre activité (YourActivity)
String s = getIntent().getStringExtra("USER_NAME");
Implémentez l'interface View.OnClickListener et remplacez la méthode onClick.
ImageView btnSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search1);
ImageView btnSearch = (ImageView) findViewById(R.id.btnSearch);
btnSearch.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSearch: {
Intent intent = new Intent(Search.this,SearchFeedActivity.class);
startActivity(intent);
break;
}
Bien que des réponses appropriées aient déjà été fournies, je suis ici pour chercher la réponse dans la langue Kotlin. Cette question n'est pas spécifique au langage, donc j'ajoute le code pour accomplir cette tâche en langage Kotlin.
Voici comment faire cela à Kotlin pour andorid
testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.java)
startActivity(intent)
}
Le moyen le plus simple d'ouvrir une activité en cliquant sur un bouton est:
onclick
fonction. MainActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.content.Intent;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goToAnotherActivity(View view) {
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
}
SecondActivity.java
package com.example.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
}
}
AndroidManifest.xml (il suffit d'ajouter ce bloc de code à l'existant)
</activity>
<activity android:name=".SecondActivity">
</activity>
Prenez le bouton en xml en premier.
<Button
android:id="@+id/pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_launcher"
android:text="Your Text"
/>
Faire lister le bouton.
pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
Lorsque le bouton est cliqué:
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent= new Intent(getApplicationContext(), NextActivity.class);
intent.putExtra("data", value); //pass data
startActivity(intent);
}
});
Pour recevoir les données supplémentaires de NextActivity.class
:
Bundle extra = getIntent().getExtras();
if (extra != null){
String str = (String) extra.get("data"); // get a object
}
Écrivez le code dans votre première activité.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondAcitvity.class);
//You can use String ,arraylist ,integer ,float and all data type.
intent.putExtra("Key","value");
startActivity(intent);
finish();
}
});
Dans secondActivity.class
String name = getIntent().getStringExtra("Key");
Placer le widget de bouton en xml comme ci-dessous
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
Après cela, initialisez et gérez l'écouteur de clic dans l'activité comme ci-dessous.
Dans la méthode Activity On Create:
Button button =(Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new
Intent(CurrentActivity.this,DesiredActivity.class);
startActivity(intent);
}
});