android - मैं एंड्रॉइड एप्लिकेशन में गतिविधियों के बीच डेटा कैसे पास करूं?
android-intent android-activity (20)
मेरे पास एक परिदृश्य है, जहां लॉगिन पेज के माध्यम से लॉग इन करने के बाद, प्रत्येक activity
पर एक साइन-आउट button
।
साइन-आउट पर क्लिक करने पर, मैं साइन-इन करने के लिए साइन इन किए गए उपयोगकर्ता की session id
पास कर दूंगा। क्या कोई मुझे मार्गदर्शन कर सकता है कि सभी activities
लिए session id
कैसे उपलब्ध कराया जाए?
इस मामले के लिए कोई विकल्प
पूरक उत्तर: कुंजी स्ट्रिंग के लिए नामकरण सम्मेलन
डेटा पास करने की वास्तविक प्रक्रिया का उत्तर पहले से ही दिया जा चुका है, हालांकि अधिकांश उत्तर इरादे में कुंजी नाम के लिए हार्ड कोडेड स्ट्रिंग का उपयोग करते हैं। यह आमतौर पर ठीक है जब केवल आपके ऐप के भीतर उपयोग किया जाता है। हालांकि, दस्तावेज मानकीकृत डेटा प्रकारों के लिए EXTRA_*
स्थिरांक का उपयोग करने की सिफारिश करता है।
उदाहरण 1: Intent.EXTRA_*
कुंजी का उपयोग करना
पहली गतिविधि
Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, "my text");
startActivity(intent);
दूसरी गतिविधि:
Intent intent = getIntent();
String myText = intent.getExtras().getString(Intent.EXTRA_TEXT);
उदाहरण 2: अपनी static final
कुंजी को परिभाषित करना
यदि Intent.EXTRA_*
स्ट्रिंग्स में से एक आपकी आवश्यकताओं के अनुरूप नहीं है, तो आप पहली गतिविधि की शुरुआत में अपना खुद का परिभाषित कर सकते हैं।
static final String EXTRA_STUFF = "com.myPackageName.EXTRA_STUFF";
पैकेज नाम समेत केवल एक सम्मेलन है यदि आप केवल अपने ऐप में कुंजी का उपयोग कर रहे हैं। लेकिन अगर आप किसी प्रकार की सेवा बना रहे हैं तो अन्य ऐप्स विवादों से निपटने से बचने की आवश्यकता है।
पहली गतिविधि:
Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(EXTRA_STUFF, "my text");
startActivity(intent);
दूसरी गतिविधि:
Intent intent = getIntent();
String myText = intent.getExtras().getString(FirstActivity.EXTRA_STUFF);
उदाहरण 3: एक स्ट्रिंग संसाधन कुंजी का उपयोग करना
हालांकि दस्तावेज़ीकरण में उल्लेख नहीं किया गया है, यह उत्तर गतिविधियों के बीच निर्भरताओं से बचने के लिए एक स्ट्रिंग संसाधन का उपयोग करने की सिफारिश करता है।
strings.xml
<string name="EXTRA_STUFF">com.myPackageName.MY_NAME</string>
पहली गतिविधि
Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(getString(R.string.EXTRA_STUFF), "my text");
startActivity(intent);
दूसरी गतिविधि
Intent intent = getIntent();
String myText = intent.getExtras().getString(getString(R.string.EXTRA_STUFF));
अपनी वर्तमान गतिविधि में, एक नया Intent
बनाएं:
String value="Hello world";
Intent i = new Intent(CurrentActivity.this, NewActivity.class);
i.putExtra("key",value);
startActivity(i);
फिर नई गतिविधि में, उन मानों को पुनर्प्राप्त करें:
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("key");
//The key argument here must match that used in the other activity
}
एक गतिविधि से दूसरी गतिविधि में चर को पारित करने के लिए इस तकनीक का उपयोग करें।
आप SharedPreferences
उपयोग कर सकते हैं ...
लॉगिंग।
SharedPreferences
में टाइम स्टोर सत्र आईडीSharedPreferences preferences = getSharedPreferences("session",getApplicationContext().MODE_PRIVATE); Editor editor = preferences.edit(); editor.putString("sessionId", sessionId); editor.commit();
साइन आउट। साझा संदर्भों में समय लाने का सत्र आईडी
SharedPreferences preferences = getSharedPreferences("session", getApplicationContext().MODE_PRIVATE); String sessionId = preferences.getString("sessionId", null);
यदि आपके पास आवश्यक सत्र आईडी नहीं है, तो साझा संदर्भ हटाएं:
SharedPreferences settings = context.getSharedPreferences("session", Context.MODE_PRIVATE);
settings.edit().clear().commit();
यह बहुत उपयोगी है, क्योंकि एक बार जब आप मूल्य को बचाते हैं और फिर गतिविधि के कहीं भी पुनर्प्राप्त करते हैं।
आप पार्ससेल योग्य वर्ग बनाकर कस्टम क्लास ऑब्जेक्ट्स भी पास कर सकते हैं। इसे पार्सल करने योग्य बनाने का सबसे अच्छा तरीका है अपनी कक्षा लिखना और फिर इसे http://www.parcelabler.com/ जैसी साइट पर पेस्ट http://www.parcelabler.com/ । निर्माण पर क्लिक करें और आपको नया कोड मिल जाएगा। यह सब कॉपी करें और मूल वर्ग सामग्री को प्रतिस्थापित करें। फिर-
Intent intent = new Intent(getBaseContext(), NextActivity.class);
Foo foo = new Foo();
intent.putExtra("foo", foo);
startActivity(intent);
और परिणामस्वरूप अगली गतिविधि में परिणाम प्राप्त करें-
Foo foo = getIntent().getExtras().getParcelable("foo");
अब आप केवल foo ऑब्जेक्ट का उपयोग कर सकते हैं जैसे आप इस्तेमाल करते थे।
आप साझा वरीयता का प्रयास कर सकते हैं, यह गतिविधियों के बीच डेटा साझा करने के लिए एक अच्छा विकल्प हो सकता है
सत्र आईडी को सहेजने के लिए -
SharedPreferences pref = myContexy.getSharedPreferences("Session
Data",MODE_PRIVATE);
SharedPreferences.Editor edit = pref.edit();
edit.putInt("Session ID", session_id);
edit.commit();
उन्हें पाने के लिए -
SharedPreferences pref = myContexy.getSharedPreferences("Session Data", MODE_PRIVATE);
session_id = pref.getInt("Session ID", 0);
इसे इस्तेमाल करे:
CurrentActivity.java
Intent intent = new Intent(currentActivity.this, TargetActivity.class);
intent.putExtra("booktype", "favourate");
startActivity(intent);
TargetActivity.java
Bundle b = getIntent().getExtras();
String typesofbook = b.getString("booktype");
एरिच ने नोट किया कि पासिंग Intent अतिरिक्त एक अच्छा दृष्टिकोण है।
हालांकि, ऑब्जेक्ट ऑब्जेक्ट एक और तरीका है, और कभी-कभी कई गतिविधियों में एक ही राज्य से निपटने के दौरान यह कभी-कभी आसान होता है (जैसा कि इसे हर जगह प्राप्त करने / रखने के विपरीत), या प्राइमेटिव्स और स्ट्रिंग्स से अधिक जटिल वस्तुएं होती हैं।
आप एप्लिकेशन का विस्तार कर सकते हैं, और उसके बाद जो कुछ भी चाहते हैं उसे सेट / प्राप्त करें और getApplication() साथ किसी भी गतिविधि (उसी एप्लिकेशन में) से इसे एक्सेस करें।
यह भी ध्यान रखें कि अन्य दृष्टिकोण जो आप देख सकते हैं, जैसे स्टेटिक्स, समस्याग्रस्त हो सकते हैं क्योंकि वे स्मृति रिसाव का कारण बन सकते हैं । आवेदन भी इसे हल करने में मदद करता है।
ऐसा करने का सबसे आसान तरीका सत्र आईडी को उस गतिविधि में साइनआउट गतिविधि को पास करना होगा जिसका उपयोग आप गतिविधि शुरू करने के लिए कर रहे हैं:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
अगली गतिविधि पर उस इरादे को एक्सेस करें
String s = getIntent().getStringExtra("EXTRA_SESSION_ID");
इरादों के लिए docs में अधिक जानकारी है ("अतिरिक्त" शीर्षक वाले अनुभाग को देखें)।
गतिविधियों के बीच डेटा पारित करने का सबसे सुविधाजनक तरीका इरादों से गुज़रना है। पहली गतिविधि में जहां से आप डेटा भेजना चाहते हैं, आपको कोड जोड़ना चाहिए,
String str = "My Data"; //Data you want to send
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("name",str); //Here you will add the data into intent to pass bw activites
v.getContext().startActivity(intent);
आपको आयात करना चाहिए
import android.content.Intent;
फिर अगली Acitvity (SecondActivity) में, आपको निम्न कोड का उपयोग करके इरादे से डेटा पुनर्प्राप्त करना चाहिए।
String name = this.getIntent().getStringExtra("name");
चार्ली कॉलिन्स ने मुझे Application.class
का उपयोग करके एक सही answer दिया। मुझे पता नहीं था कि हम इसे आसानी से उपclass कर सकते हैं। कस्टम एप्लिकेशन क्लास का उपयोग करके एक सरलीकृत उदाहरण यहां दिया गया है।
AndroidManifest.xml
android:name
दें android:name
अपनी विशेषता वर्ग का उपयोग करने के लिए android:name
विशेषता।
...
<application android:name="MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
....
MyApplication.java
इसे वैश्विक संदर्भ धारक के रूप में उपयोग करें। यह एक ही प्रक्रिया के भीतर ठीक काम करता है।
public class MyApplication extends Application {
private MainActivity mainActivity;
@Override
public void onCreate() {
super.onCreate();
}
public void setMainActivity(MainActivity activity) { this.mainActivity=activity; }
public MainActivity getMainActivity() { return mainActivity; }
}
MainActivity.java
एप्लिकेशन उदाहरण के लिए वैश्विक "सिंगलटन" संदर्भ सेट करें।
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((MyApplication)getApplication()).setMainActivity(this);
}
...
}
MyPreferences.java
एक साधारण उदाहरण जहां मैं किसी अन्य गतिविधि उदाहरण से मुख्य गतिविधि का उपयोग करता हूं।
public class MyPreferences extends PreferenceActivity
implements SharedPreferences.OnSharedPreferenceChangeListener {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (!key.equals("autostart")) {
((MyApplication)getApplication()).getMainActivity().refreshUI();
}
}
}
मानक दृष्टिकोण।
Intent i = new Intent(this, ActivityTwo.class);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
String getrec=textView.getText().toString();
Bundle bundle = new Bundle();
bundle.putString(“stuff”, getrec);
i.putExtras(bundle);
startActivity(i);
अब आपकी दूसरी गतिविधि में बंडल से अपना डेटा पुनर्प्राप्त करें:
बंडल प्राप्त करें
Bundle bundle = getIntent().getExtras();
डेटा निकालें ...
String stuff = bundle.getString(“stuff”);
मैं कक्षा में स्थिर फ़ील्ड का उपयोग करता हूं, और उन्हें प्राप्त / सेट करता हूं:
पसंद:
public class Info
{
public static int ID = 0;
public static String NAME = "TEST";
}
मूल्य प्राप्त करने के लिए, इसे किसी गतिविधि में उपयोग करें:
Info.ID
Info.NAME
मूल्य निर्धारित करने के लिए:
Info.ID = 5;
Info.NAME = "USER!";
यह मुझे संदर्भ में चीजों को देखने में मदद करता है। यहां दो उदाहरण दिए गए हैं।
डेटा अग्रेषित करना
मुख्य गतिविधि
- एक कुंजी-मूल्य जोड़ी के साथ एक इरादे में जिस डेटा को आप भेजना चाहते हैं उसे रखें। कुंजी के लिए सम्मेलन नामकरण के लिए यह उत्तर देखें।
- प्रारंभ गतिविधि के साथ दूसरी गतिविधि शुरू करें।
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// "Go to Second Activity" button click
public void onButtonClick(View view) {
// get the text to pass
EditText editText = (EditText) findViewById(R.id.editText);
String textToPass = editText.getText().toString();
// start the SecondActivity
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, textToPass);
startActivity(intent);
}
}
दूसरी गतिविधि
- आप दूसरी गतिविधि शुरू करने वाले
Intent
को पाने के लिएgetIntent()
का उपयोग करते हैं। फिर आपgetExtras()
और कुंजी को पहली गतिविधि में परिभाषित कुंजी के साथ डेटा निकाल सकते हैं। चूंकि हमारा डेटा एक स्ट्रिंग है, इसलिए हम यहांgetStringExtra
का उपयोग करेंगे।
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
// get the text from MainActivity
Intent intent = getIntent();
String text = intent.getStringExtra(Intent.EXTRA_TEXT);
// use the text in a TextView
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(text);
}
}
डेटा वापस पास करना
मुख्य गतिविधि
-
startActivityForResult
साथ दूसरी गतिविधि प्रारंभ करें, इसे एक मनमाना परिणाम कोड प्रदान करें। -
onActivityResult
ओवरराइड करें। यह दूसरी गतिविधि समाप्त होने पर कहा जाता है। आप यह सुनिश्चित कर सकते हैं कि परिणाम कोड की जांच करके यह वास्तव में दूसरी गतिविधि है। (यह तब उपयोगी होता है जब आप एक ही मुख्य गतिविधि से कई अलग-अलग गतिविधियां शुरू कर रहे हैं।) - वापसी के
Intent
से प्राप्त डेटा निकालें। एक कुंजी-मूल्य जोड़ी का उपयोग कर डेटा निकाला जाता है। मैं कुंजी के लिए किसी भी स्ट्रिंग का उपयोग कर सकता हूं लेकिन मैं पूर्वनिर्धारितIntent.EXTRA_TEXT
उपयोगIntent.EXTRA_TEXT
क्योंकि मैं टेक्स्ट भेज रहा हूं।
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final int SECOND_ACTIVITY_REQUEST_CODE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// "Go to Second Activity" button click
public void onButtonClick(View view) {
// Start the SecondActivity
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);
}
// This method is called when the second activity finishes
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// check that it is the SecondActivity with an OK result
if (requestCode == SECOND_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// get String data from Intent
String returnString = data.getStringExtra(Intent.EXTRA_TEXT);
// set text view with string
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(returnString);
}
}
}
}
दूसरी गतिविधि
- उस डेटा को रखें जिसे आप पिछली गतिविधि पर किसी
Intent
में वापस भेजना चाहते हैं। एक कुंजी-मूल्य जोड़ी का उपयोग करIntent
में डेटा संग्रहीत किया जाता है। मैंने अपनी कुंजी के लिएIntent.EXTRA_TEXT
का उपयोग करना चुना। - परिणाम
RESULT_OK
सेट करें और अपना डेटा धारण करने का इरादा जोड़ें। - दूसरी गतिविधि को बंद करने के लिए कॉल
finish()
।
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
// "Send text back" button click
public void onButtonClick(View view) {
// get the text from the EditText
EditText editText = (EditText) findViewById(R.id.editText);
String stringToPassBack = editText.getText().toString();
// put the String to pass back into an Intent and close this activity
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_TEXT, stringToPassBack);
setResult(RESULT_OK, intent);
finish();
}
}
यहां मेरा सबसे अच्छा अभ्यास है और यह परियोजना बहुत बड़ी और जटिल होने पर बहुत मदद करता है।
मान लीजिए कि मेरे पास 2 गतिविधियां हैं, LoginActivity
और HomeActivity
। मैं LoginActivity
से LoginActivity
तक 2 पैरामीटर (उपयोगकर्ता नाम और पासवर्ड) पास करना चाहता HomeActivity
।
सबसे पहले, मैं अपना HomeIntent
बना देता हूं
public class HomeIntent extends Intent {
private static final String ACTION_LOGIN = "action_login";
private static final String ACTION_LOGOUT = "action_logout";
private static final String ARG_USERNAME = "arg_username";
private static final String ARG_PASSWORD = "arg_password";
public HomeIntent(Context ctx, boolean isLogIn) {
this(ctx);
//set action type
setAction(isLogIn ? ACTION_LOGIN : ACTION_LOGOUT);
}
public HomeIntent(Context ctx) {
super(ctx, HomeActivity.class);
}
//This will be needed for receiving data
public HomeIntent(Intent intent) {
super(intent);
}
public void setData(String userName, String password) {
putExtra(ARG_USERNAME, userName);
putExtra(ARG_PASSWORD, password);
}
public String getUsername() {
return getStringExtra(ARG_USERNAME);
}
public String getPassword() {
return getStringExtra(ARG_PASSWORD);
}
//To separate the params is for which action, we should create action
public boolean isActionLogIn() {
return getAction().equals(ACTION_LOGIN);
}
public boolean isActionLogOut() {
return getAction().equals(ACTION_LOGOUT);
}
}
यहां बताया गया है कि मैं अपने लॉगिन एक्टिविटी में डेटा कैसे पास करता हूं
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
String username = "phearum";
String password = "pwd1133";
final boolean isActionLogin = true;
//Passing data to HomeActivity
final HomeIntent homeIntent = new HomeIntent(this, isActionLogin);
homeIntent.setData(username, password);
startActivity(homeIntent);
}
}
अंतिम चरण, यहां बताया गया है कि मुझे HomeActivity
में डेटा कैसे प्राप्त होता है
public class HomeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//This is how we receive the data from LoginActivity
//Make sure you pass getIntent() to the HomeIntent constructor
final HomeIntent homeIntent = new HomeIntent(getIntent());
Log.d("HomeActivity", "Is action login? " + homeIntent.isActionLogIn());
Log.d("HomeActivity", "username: " + homeIntent.getUsername());
Log.d("HomeActivity", "password: " + homeIntent.getPassword());
}
}
किया हुआ! अच्छा :) मैं बस अपना अनुभव साझा करना चाहता हूं। यदि आप छोटी परियोजना पर काम कर रहे हैं तो यह बड़ी समस्या नहीं होनी चाहिए। लेकिन जब आप बड़ी परियोजना पर काम करते हैं, तो जब आप रीफैक्टरिंग या बग फिक्स करना चाहते हैं तो यह वास्तव में दर्द होता है।
यदि आप सक्रियण / टुकड़ों के बीच बिटमैप को ट्रांसफर करना चाहते हैं
गतिविधि
सक्रियताओं के बीच बिटमैप पास करने के लिए
Intent intent = new Intent(this, Activity.class);
intent.putExtra("bitmap", bitmap);
और गतिविधि वर्ग में
Bitmap bitmap = getIntent().getParcelableExtra("bitmap");
टुकड़ा
टुकड़ों के बीच एक बिटमैप पास करने के लिए
SecondFragment fragment = new SecondFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", bitmap);
fragment.setArguments(bundle);
द्वितीय फ्रेगमेंट के अंदर प्राप्त करने के लिए
Bitmap bitmap = getArguments().getParcelable("bitmap");
बड़े बिटमैप्स ट्रांसफर करना
यदि आप असफल बाइंडर लेनदेन प्राप्त कर रहे हैं, तो इसका मतलब है कि आप एक गतिविधि से दूसरे गतिविधि में बड़े तत्व को स्थानांतरित करके बाइंडर लेनदेन बफर से अधिक हो रहे हैं।
तो उस स्थिति में आपको बिटमैप को बाइट की सरणी के रूप में संपीड़ित करना होगा और फिर इसे किसी अन्य गतिविधि में असम्पीडित करना होगा , इस तरह
प्रथम गतिविधि में
Intent intent = new Intent(this, SecondActivity.class);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPG, 100, stream);
byte[] bytes = stream.toByteArray();
intent.putExtra("bitmapbytes",bytes);
और दूसरी गतिविधि में
byte[] bytes = getIntent().getByteArrayExtra("bitmapbytes");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
अपडेट किया गया नोट कि मैंने SharedPreference के उपयोग का उल्लेख किया था। इसमें एक साधारण एपीआई है और एप्लिकेशन की गतिविधियों में पहुंच योग्य है। लेकिन यह एक बेवकूफ समाधान है, और यदि आप संवेदनशील डेटा पास करते हैं तो यह एक सुरक्षा जोखिम है। इरादों का उपयोग करना सबसे अच्छा है। इसमें ओवरलोडेड विधियों की विस्तृत सूची है जिसका उपयोग गतिविधियों के बीच कई अलग-अलग डेटा प्रकारों को बेहतर स्थानांतरित करने के लिए किया जा सकता है। intent.putExtra पर एक नज़र intent.putExtra । यह link PutExtra के उपयोग को अच्छी तरह से प्रस्तुत करता है।
गतिविधियों के बीच डेटा पास करने में, मेरा पसंदीदा दृष्टिकोण प्रासंगिक गतिविधि के लिए एक स्थिर विधि बनाना है जिसमें आवश्यक पैरामीटर शामिल हैं, इरादे को लॉन्च करें। जो तब आसानी से सेटअप और पैरामीटर पुनर्प्राप्त प्रदान करता है। तो यह इस तरह दिख सकता है
public class MyActivity extends Activity {
public static final String ARG_PARAM1 = "arg_param1";
...
public static getIntent(Activity from, String param1, Long param2...) {
Intent intent = new Intent(from, MyActivity.class);
intent.putExtra(ARG_PARAM1, param1);
intent.putExtra(ARG_PARAM2, param2);
return intent;
}
....
// Use it like this.
startActivity(MyActvitiy.getIntent(FromActivity.this, varA, varB, ...));
...
फिर आप इच्छित गतिविधि के लिए एक इरादा बना सकते हैं और सुनिश्चित कर सकते हैं कि आपके पास सभी पैरामीटर हैं। आप टुकड़ों के लिए अनुकूलित कर सकते हैं। ऊपर एक साधारण उदाहरण है, लेकिन आपको विचार मिलता है।
If you use kotlin:
In MainActivity1:
var intent=Intent(this,MainActivity2::class.java)
intent.putExtra("EXTRA_SESSION_ID",sessionId)
startActivity(intent)
In MainActivity2:
if (intent.hasExtra("EXTRA_SESSION_ID")){
var name:String=intent.extras.getString("sessionId")
}
There are multiple ways to pass data between activities, and the documentation has many of them.
For most cases, Intent.putExtras is enough.
You can use Intent
Intent mIntent = new Intent(FirstActivity.this, SecondActivity.class);
mIntent.putExtra("data", data);
startActivity(mIntent);
Another way you can use singleton pattern also:
public class DataHolder {
private static DataHolder dataHolder;
private List<Model> dataList;
public void setDataList(List<Model>dataList) {
this.dataList = dataList;
}
public List<Model> getDataList() {
return dataList;
}
public synchronized static DataHolder getInstance() {
if (dataHolder == null) {
dataHolder = new DataHolder();
}
return dataHolder;
}
}
From your FirstActivity
private List<Model> dataList = new ArrayList<>();
DataHolder.getInstance().setDataList(dataList);
On SecondActivity
private List<Model> dataList = DataHolder.getInstance().getDataList();
/*
* If you are from transferring data from one class that doesn't
* extend Activity, then you need to do something like this.
*/
public class abc {
Context context;
public abc(Context context) {
this.context = context;
}
public void something() {
context.startactivity(new Intent(context, anyone.class).putextra("key", value));
}
}