Risposte:
Facile.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);
Gli extra vengono recuperati dall'altra parte tramite:
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
String value = intent.getStringExtra("key"); //if it's a string you stored.
}
Non dimenticare di aggiungere la tua nuova attività in AndroidManifest.xml:
<activity android:label="@string/app_name" android:name="NextActivity"/>
CurrentActivity.this.startActivity(myIntent)
e startActivity(myIntent)
?
Creare un intento per un'attività ViewPerson e passare il PersonID (ad esempio per una ricerca nel database).
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
Quindi in Attività ViewPerson, puoi ottenere il pacchetto di dati extra, assicurarti che non sia nullo (nel caso in cui a volte non passi i dati), quindi ottieni i dati.
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
personID = extras.getString("PersonID");
}
Ora, se hai bisogno di condividere dati tra due attività, puoi anche avere un Singleton globale.
public class YourApplication extends Application
{
public SomeDataClass data = new SomeDataClass();
}
Quindi chiamalo in qualsiasi attività:
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
Le risposte attuali sono ottime, ma è necessaria una risposta più completa per i principianti. Esistono 3 modi diversi per iniziare una nuova attività in Android e tutti usano la Intent
classe; Intento | Sviluppatori Android .
onClick
attributo del pulsante. (Principiante)OnClickListener()
tramite una classe anonima. (Intermedio)switch
istruzione. (Pro)Ecco il link al mio esempio se vuoi seguire:
onClick
attributo del pulsante. (Principiante)I pulsanti hanno un onClick
attributo che si trova nel file .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" />
Nella 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);
}
Vantaggio : facile da realizzare al volo, modulare e può facilmente impostare più onClick
s allo stesso scopo.
Svantaggio : difficoltà di lettura durante la revisione.
OnClickListener()
tramite una classe anonima. (Intermedio)Questo è quando si imposta un separato setOnClickListener()
per ciascuno button
e sovrascrive ciascuno onClick()
con il suo intento.
Nella 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);}
});
Vantaggio : facile da realizzare al volo.
Svantaggio : ci saranno molte classi anonime che renderanno difficile la leggibilità durante la revisione.
switch
istruzione. (Pro)Questo è quando si utilizza switch
un'istruzione per i pulsanti all'interno del onClick()
metodo per gestire tutti i pulsanti dell'attività.
Nella 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;
}
Vantaggio : facile gestione dei pulsanti perché tutti gli intenti dei pulsanti sono registrati in un unico onClick()
metodo
Per la seconda parte della domanda, passando i dati, vedere Come passare i dati tra le attività nell'applicazione Android?
Quando l'utente fa clic sul pulsante, direttamente all'interno dell'XML in questo modo:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextButton"
android:onClick="buttonClickFunction"/>
Usando l'attributo android:onClick
dichiariamo il nome del metodo che deve essere presente sull'attività principale. Quindi devo creare questo metodo all'interno della nostra attività in questo modo:
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.
Emmanuele,
Penso che le informazioni extra dovrebbero essere messe prima di iniziare l'attività, altrimenti i dati non saranno ancora disponibili se si accede ad essa nel metodo onCreate di NextActivity.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
Dall'attività di invio provare il seguente codice
//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);
}
Dall'attività di ricezione provare il seguente codice:
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);
Quindi aggiungi il seguente codice al file AndroidManifest.xml
android:name="packagename.NameOfTheReceivingActivity"
android:label="Title of the Activity"
android:parentActivityName="packagename.NameOfSendingActivity"
Prova questo semplice metodo.
startActivity(new Intent(MainActivity.this, SecondActivity.class));
Il modo per iniziare nuove attività è trasmettere un intento e esiste un tipo specifico di intento che è possibile utilizzare per passare i dati da un'attività a un'altra. La mia raccomandazione è di consultare i documenti per sviluppatori Android relativi alle intenzioni ; è una ricchezza di informazioni sull'argomento e ha anche degli esempi.
Prima attività
startActivity(Intent(this, SecondActivity::class.java)
.putExtra("key", "value"))
Seconda attività
val value = getIntent().getStringExtra("key")
Suggerimento
Metti sempre le chiavi in un file costante per un modo più gestito.
companion object {
val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
.putExtra(PUT_EXTRA_USER, "value"))
L'avvio di un'attività da un'altra attività è uno scenario molto comune tra le applicazioni Android.
Per iniziare un'attività è necessario un oggetto Intent .
Un oggetto intent accetta due parametri nel suo costruttore
Esempio:
Ad esempio, se hai due attività, dì HomeActivity
e DetailActivity
e vuoi iniziare DetailActivity
da HomeActivity
(HomeActivity -> DetailActivity).
Ecco lo snippet di codice che mostra come avviare DetailActivity da
HomeActivity.
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
E il gioco è fatto.
Tornando alla parte clic del pulsante.
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);
}
});
Inizia un'altra attività da questa attività e puoi passare parametri anche tramite Bundle Object.
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "xyz@gmail.com");
startActivity(intent);
Recuperare i dati in un'altra attività (YourActivity)
String s = getIntent().getStringExtra("USER_NAME");
Implementare l'interfaccia View.OnClickListener e sovrascrivere il metodo 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;
}
Sebbene siano già state fornite risposte adeguate, sono qui per cercare la risposta in lingua Kotlin. Questa domanda non riguarda il linguaggio specifico, quindi sto aggiungendo il codice per eseguire questa attività nel linguaggio Kotlin.
Ecco come si fa in Kotlin per Andorid
testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.java)
startActivity(intent)
}
Il modo più semplice per aprire l'attività al clic del pulsante è:
onclick
funzione. 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 (basta aggiungere questo blocco di codice all'esistente)
</activity>
<activity android:name=".SecondActivity">
</activity>
Prendi prima Button in xml.
<Button
android:id="@+id/pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_launcher"
android:text="Your Text"
/>
Fai listener del pulsante.
pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
Quando si fa clic sul pulsante:
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);
}
});
Per ricevere i dati extra da NextActivity.class
:
Bundle extra = getIntent().getExtras();
if (extra != null){
String str = (String) extra.get("data"); // get a object
}
Scrivi il codice nella tua prima attività.
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();
}
});
In secondActivity.class
String name = getIntent().getStringExtra("Key");
Posiziona il widget del pulsante in XML come di seguito
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
Dopo l'inizializzazione e la gestione dei clic sull'ascoltatore in Attività come sotto.
Nel metodo Attività su Crea:
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);
}
});