Comment puis-je envoyer des données d'une activité (intention) à une autre?
J'utilise ce code pour envoyer des données:
Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);
Tout d’abord, obtenez l’intention qui a démarré votre activité en utilisant la méthode getIntent()
:
Intent intent = getIntent();
Si vos données supplémentaires sont représentées sous forme de chaînes, vous pouvez utiliser la méthode intent.getStringExtra(String name)
. Dans ton cas:
String id = intent.getStringExtra("id");
String name = intent.getStringExtra("name");
Dans l'activité d'accueil
Bundle extras = getIntent().getExtras();
String userName;
if (extras != null) {
userName = extras.getString("name");
// and get whatever type user account id is
}
// How to send value using intent from one class to another class
// class A(which will send data)
Intent theIntent = new Intent(this, B.class);
theIntent.putExtra("name", john);
startActivity(theIntent);
// How to get these values in another class
// Class B
Intent i= getIntent();
i.getStringExtra("name");
// if you log here i than you will get the value of i i.e. john
String value = "Hello World!";
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("sample_name", value);
startActivity(intent);
String value;
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
value = bundle.getString("sample_name");
}
Au lieu d'initialiser une autre nouvelle intention de recevoir les données, procédez comme suit:
String id = getIntent().getStringExtra("id");
Si utilisé dans FragmentActivity, essayez ceci:
La première page s'étend FragmentActivity
Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class);
Tabdetail.putExtra("Marker", marker.getTitle().toString());
startActivity(Tabdetail);
Dans le fragment, il vous suffit d'appeler d'abord getActivity()
,
La deuxième page s'étend Fragment :
String receive = getActivity().getIntent().getExtras().getString("name");
Si vous essayez d’obtenir des données supplémentaires dans des fragments, vous pouvez utiliser:
Placez les données en utilisant:
Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER);
Obtenir des données en utilisant:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getArguments().getInt(ARG_SECTION_NUMBER);
getArguments().getString(ARG_SECTION_STRING);
getArguments().getBoolean(ARG_SECTION_BOOL);
getArguments().getChar(ARG_SECTION_CHAR);
getArguments().getByte(ARG_SECTION_DATA);
}
Vous pouvez obtenir n'importe quel type de datan supplémentaire par intention , peu importe qu'il s'agisse d'un objet, d'un sting ou de tout type de données.
Bundle extra = getIntent().getExtras();
if (extra != null){
String str1 = (String) extra.get("obj"); // get a object
String str2 = extra.getString("string"); //get a string
}
et Solution la plus courte :
Boolean isGranted = getIntent().getBooleanExtra("tag", false);
Première activité
val intent = Intent(this, SecondActivity::class.Java)
intent.putExtra("key", "value")
startActivity(intent)
Deuxième activité
val value = getIntent().getStringExtra("key")
Suggestion
Toujours mettre les clés dans le fichier constant pour plus de manière gérée.
companion object {
val PUT_EXTRA_USER = "PUT_EXTRA_USER"
}
** Mettre les données par intention - **
Intent intent = new Intent(mContext, HomeWorkReportActivity.class);
intent.putExtra("subjectName","Maths");
intent.putExtra("instituteId",22);
mContext.startActivity(intent);
** Obtenir les données par intention - **
String subName = getIntent().getStringExtra("subjectName");
int insId getIntent().getIntExtra("instituteId",0);
si nous envoyons Valeur entière par intention. lorsque nous devons utiliser le 2e paramètre 0 dans getIntent (). getIntExtra ("instituteId", 0) sinon, nous n'utilisons pas 0, Android me donne une erreur.
Passez l'intention avec la valeur sur la première activité:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);
Recevoir l'intention de la deuxième activité; -
Intent intent = getIntent();
String user = intent.getStringExtra("uid");
String pass = intent.getStringExtra("pwd");
Nous utilisons généralement deux méthodes dans l'intention d'envoyer la valeur et d'obtenir la valeur . Pour envoyer la valeur, nous utiliserons intent.putExtra("key", Value);
et lors de la réception de l'intention sur une autre activité, nous utiliserons intent.getStringExtra("key");
pour obtenir les données de l'intention sous la forme String
méthode disponible pour obtenir d'autres types de données (Integer
, Boolean
, etc.) . La clé peut être n'importe quel mot-clé pour identifier la valeur qui signifie quelle valeur vous partagez . J'espère que cela fonctionnera pour vous.
Juste une suggestion:
Au lieu d'utiliser "id" ou "name" dans votre i.putExtra ("id" .....), je suggérerais, lorsque cela est pertinent, d'utiliser les champs standard actuels pouvant être utilisés avec putExtra (), c'est-à-dire Intent.EXTRA_something.
Une liste complète est disponible à l'adresse Intent (Développeurs Android).
Nous pouvons le faire par des moyens simples:
Dans FirstActivity:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);
En seconde activité:
try {
Intent intent = getIntent();
String uid = intent.getStringExtra("uid");
String pwd = intent.getStringExtra("pwd");
} catch (Exception e) {
e.printStackTrace();
Log.e("getStringExtra_EX", e + "");
}
Ceci est pour l'adaptateur, pour l'activité, il vous suffit de changer mContext Pour votre nom d’Activty et pour fragment, vous devez remplacer mContext par getActivity ()
public static ArrayList<String> tags_array ;// static array list if you want to pass array data
public void sendDataBundle(){
tags_array = new ArrayList();
tags_array.add("hashtag");//few array data
tags_array.add("selling");
tags_array.add("cityname");
tags_array.add("more");
tags_array.add("mobile");
tags_array.add("Android");
tags_array.add("dress");
Intent su = new Intent(mContext, ViewItemActivity.class);
Bundle bun1 = new Bundle();
bun1.putString("product_title","My Product Titile");
bun1.putString("product_description", "My Product Discription");
bun1.putString("category", "Product Category");
bun1.putStringArrayList("hashtag", tags_array);//to pass array list
su.putExtras(bun1);
mContext.startActivity(su);
}
Pour accéder aux données de l'intention, vous devez savoir deux choses.
Il existe différentes méthodes dans la classe d’intention pour extraire différents types de types de données .
getIntent (). XXXX (KEY) ou intent.XXX (KEY);
Donc, si vous connaissez le type de données de votre varibale que vous avez défini dans otherActivity, vous pouvez utiliser la méthode correspondante.
String profileName = getIntent().getStringExtra("SomeKey");
Vous pouvez voir la liste des méthodes disponibles dans la documentation officielle de Intention .
Vous pouvez aussi faire comme ça
// mettre de la valeur dans l'intention
Intent in = new Intent(MainActivity.this, Booked.class);
in.putExtra("filter", "Booked");
startActivity(in);
// obtient la valeur de l'intention
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String filter = bundle.getString("filter");