2011-12-09 16 views
35

मैं दो मानों को दूसरी गतिविधि में पास करना चाहता हूं, क्या मैं इसे putExtra के साथ कर सकता हूं या क्या मुझे इसे और अधिक जटिल तरीके से करना है, जो यह मेरे पढ़ने से लगता है। उदा .. क्या इस काम की तरह कुछ हो सकता है?एंड्रॉइड, क्या मैं कई मानों को पास करने के लिए putExtra का उपयोग कर सकता हूं

public final static String ID_EXTRA="com.fnesse.beachguide._ID"; 

Intent i = new Intent(this, CoastList.class); 
i.putExtra(ID_EXTRA, "1", "111"); 
startActivity(i); 

उपर्युक्त त्रुटि देता है।

संपादित

पहली बात मैंने कोशिश के समान था:

i.putExtra(ID_EXTRA1, "1"); 
i.putExtra(ID_EXTRA2, "111"); 

लेकिन ID_EXTRA2 ID_EXTRA1

तो अधिक लिखने के लिए लगता है,

i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 

तरह लग रहा है जाओ लेकिन मैं मूल्य कैसे निकालें दूसरी गतिविधि में सरणी से, मैं इसे एक ही मान के लिए उपयोग कर रहा हूं।

passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA); 

मुझे लगता है मैं एक सरणी में ID_EXTRA चालू करने के लिए किसी भी तरह है लगता है ???

उत्तर

21

आप एकाधिक कुंजी का उपयोग करके कई मानों को पारित कर सकते हैं।

i.putExtra(ID_EXTRA, "1", "111"); 

के बजाय कर

i.putExtra(ID_EXTRA1, "1"); 
i.putExtra(ID_EXTRA2, "111"); 
बेशक

आप चाबी के लिए 2 स्थिरांक को परिभाषित करने और दोनों नई गतिविधि में अलग से पढ़ने के लिए करना है।

या आप के माध्यम से

i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 
+0

मैं प्राप्त करना चाहते हैं से

MyParcelable example = new MyParcelable(); ..... ..... Bundle bundle = new Bundle(); bundle.putParcelable("example", Parcels.wrap(example)); 

भेजना चाहते हैं ऊपर एक संपादन किया, धन्यवाद। –

+4

@MikeClarke सुनिश्चित करें कि ID_EXTRA1 और ID_EXTRA2 में उनके लिए असाइन किए गए समान मान नहीं हैं * (उदा। दोनों में 'com.fnesse.beachguide._ID') * है। अन्यथा वे एक ही कुंजी के रूप में गिना जाता है, जो ओवरराइट ट्रिगर करेगा। और यदि आप सरणी का उपयोग करने का प्रयास करते हैं, तो 'getIntent()। GetIringent()। GetStringExtra() 'के बजाय get getringArrayExtra()' का उपयोग करें। –

+0

धन्यवाद, यह अब काम करता है! –

1

एक स्ट्रिंग सरणी पारित नहीं, तुम नहीं है, लेकिन आप का उपयोग कर एक सरणी पारित कर सकते हैं कर सकते हैं कर सकते हैं:

i.putExtra(ID_EXTRA, new String[]{"1", "111"}); 
1
:

public Intent putExtra (String name, String[] value) 
उदाहरण के लिए इस तरह

आपका उदाहरण काम नहीं करेगा, क्योंकि ExtrasKey औरसे बना है। आप में एक Extra

इसके अलावा, अपनी चाबी जहाँ तक मुझे पता है (और पाया है), लेकिन मुझे लगता है कि एक पर गलत हो सकता है Strings होने की जरूरत है कई Keys और Values डाल सकते।

इस प्रयास करें:

public final static String ID_EXTRA="com.fnesse.beachguide._ID"; 

Intent i = new Intent(this, CoastList.class); 
i.putExtra("ID_Extra", ID_EXTRA); 
i.putExtra("1", 111); 
startActivity(i); 
112

आप एक अतिरिक्त 'बंडल' बजाय व्यक्तिगत एक्स्ट्रा कलाकार से यदि आप चाहें तो उदाहरण के लिए दे सकते हैं,: -

Intent intent = new Intent(this, MyActivity.class); 
Bundle extras = new Bundle(); 
extras.putString("EXTRA_USERNAME","my_username"); 
extras.putString("EXTRA_PASSWORD","my_password"); 
intent.putExtras(extras); 
startActivity(intent); 
फिर अपने गतिविधि है कि आपके ट्रिगर में

, तुम इतनी तरह इन संदर्भित कर सकते हैं: -

Intent intent = getIntent(); 
Bundle extras = intent.getExtras(); 
String username_string = extras.getString("EXTRA_USERNAME"); 
String password_string = extras.getString("EXTRA_PASSWORD"); 

या (यदि आप चाहें): -

Bundle extras = getIntent().getExtras(); 
String username_string = extras.getString("EXTRA_USERNAME"); 
String password_string = extras.getString("EXTRA_PASSWORD"); 

आशा है कि इससे मदद मिलती है! :-)

8

कक्षा में अतिरिक्त मूल्यों लाना

public class MainActivity extends Activity { 
     public final static String USERNAME = "com.example.myfirstapp.MESSAGE"; 
     public final static String EMAIL = "com.example.myfirstapp.EMAIL"; 

public void registerUser(View view) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText userNameTxt = (EditText) findViewById(R.id.editText1); 
     EditText emailTxt = (EditText) findViewById(R.id.editText2); 
     String userName = userNameTxt.getText().toString(); 
     String email = emailTxt.getText().toString(); 
     intent.putExtra(USERNAME, userName); 
     intent.putExtra(EMAIL,email); 
     startActivity(intent); 

    } 

अन्य वर्ग

public class DisplayMessageActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent intent = getIntent(); 
     String user = intent.getStringExtra(MainActivity.USERNAME); 
     String email = intent.getStringExtra(MainActivity.EMAIL); 
0

से अतिरिक्त मान पढ़ना मूल्य putExtra की एक एकल छोटी राशि के लिए एकदम सही है लेकिन जब आप एकाधिक मान और कस्टम ऐरेलिस्ट या सूची पास करने की आवश्यकता है तो मुझे लगता है कि यह एक बुरा विचार है। समाधान यह है कि आप Parcelable का उपयोग कर सकते हैं। आप और Singleton या Serializable का भी उपयोग करें।

Parcelable:

Parcelable वर्ग है जो आप साझा करने के लिए की जरूरत है।

public class MyParcelable implements Parcelable { 
    private int mData; 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeInt(mData); 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR 
      = new Parcelable.Creator<MyParcelable>() { 
     public MyParcelable createFromParcel(Parcel in) { 
      return new MyParcelable(in); 
     } 

     public MyParcelable[] newArray(int size) { 
      return new MyParcelable[size]; 
     } 
    }; 

    private MyParcelable(Parcel in) { 
     mData = in.readInt(); 
    } 
} 

अपनी गतिविधि फार्म जहां एक और गतिविधि जहां

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example")); 
संबंधित मुद्दे

 संबंधित मुद्दे