आशय के माध्यम से ArrayList पासिंग


82

मैं इंटेंट्स का उपयोग करके एक अन्य गतिविधि के लिए एक सरणीवादी पास करने की कोशिश कर रहा हूं। यहाँ पहली गतिविधि में कोड है।

case R.id.editButton:
        Toast.makeText(this, "edit was clicked", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(this, editList.class);
        intent.putStringArrayListExtra("stock_list", stock_list);
        startActivity(intent);
        break;

यह वह जगह है जहां मैं दूसरी गतिविधि में सूची को पुनः प्राप्त करने का प्रयास करता हूं। क्या यहाँ कुछ गड़बड़ है?

Intent i = new Intent(); //This should be getIntent();
    stock_list = new ArrayList<String>();

    stock_list = i.getStringArrayListExtra("stock_list");

जवाबों:


105

आपके प्राप्त इरादे में आपको करने की आवश्यकता है:

Intent i = getIntent();  
stock_list = i.getStringArrayListExtra("stock_list");

जिस तरह से आपके पास यह है कि आपने बिना किसी अतिरिक्त के एक नया खाली इरादा बनाया है।

यदि आपके पास केवल एक अतिरिक्त है तो आप इसे नीचे कर सकते हैं:

stock_list = getIntent().getStringArrayListExtra("stock_list");

21

मैंने इसे स्ट्रिंग के रूप में एरेलेलिस्ट से पास करके किया है ।

  1. निर्भरताcompile 'com.google.code.gson:gson:2.2.4' में जोड़ें build build.gradle ब्लॉक करें

  2. ग्रेड फाइल के साथ सिंक प्रोजेक्ट पर क्लिक करें

कार्स.जावा :

public class Cars {
    public String id, name;
}

FirstActivity.java

जब आप चाहते करने के लिए पारित ArrayList :

List<Cars> cars= new ArrayList<Cars>();
cars.add(getCarModel("1", "A"));
cars.add(getCarModel("2", "B"));
cars.add(getCarModel("3", "C"));
cars.add(getCarModel("4", "D"));

Gson gson = new Gson();

String jsonCars = gson.toJson(cars);

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("list_as_string", jsonCars);
startActivity(intent);

फ़ंक्शन द्वारा CarsModel प्राप्त करें :

private Cars getCarModel(String id, String name){
       Cars cars = new Cars();
       cars.id = id;
       cars.name = name;
    return cars;
 }

SecondActivity.java

आपको आयात करना होगा java.lang.reflect.Type;

पर OnCreate () को पुनः प्राप्त करने ArrayList :

String carListAsString = getIntent().getStringExtra("list_as_string");

Gson gson = new Gson();
Type type = new TypeToken<List<Cars>>(){}.getType();
List<Cars> carsList = gson.fromJson(carListAsString, type);
for (Cars cars : carsList){
   Log.i("Car Data", cars.id+"-"+cars.name);
}

उम्मीद है कि यह समय बचाएगा, मैंने इसे बचाया।

किया हुआ


3
या आप बस अपनी कारों के मॉडल वर्ग को पार्सलेबल इंटरफ़ेस लागू कर सकते हैं और बस इरादे से काम कर सकते हैं। parcelableArrayListExtra ("parecelable_list", CarsList); जहां कार लाईस्ट ऐरेस्टलिस्ट <कार्स> का एक उदाहरण है
नौमान हनीफ

1
डाउनवॉटर को कारण के रूप में टिप्पणी जोड़ने का ध्यान रखना चाहिए।
हिरेन पटेल

3
अगर पहले से मौजूद है intent.putStringArrayListExtra, intent.getStringArrayListExtraया getSerializableExtraमौजूद है तो मैं Gson का उपयोग क्यों करूंगा । और क्या होगा अगर मैं ग्रहण का उपयोग करूं? मुझे Gson लाइब्रेरी को डाउनलोड और जोड़ना होगा?
तुषार मोनिरुल

माई 2 बिट्स ... आप इसे इस कारण से वोट नहीं कर सकते, लेकिन आपको सीरियल को पार्सल करने की सलाह देनी चाहिए क्योंकि यह कई बार साबित हो चुका है - एंड्रॉइड के लिए इसका अधिक कुशल और आउट होना सीरियल का प्रदर्शन करता है।
user3833732

13

यदि आप विशिष्ट प्रकार की बजाय कक्षा के साथ जेनेरिक सरणी सूची का उपयोग कर रहे हैं

पूर्व:

private ArrayList<Model> aListModel = new ArrayList<Model>();

यहाँ, मॉडल = कक्षा

प्राप्त करने की तरह इरादा:

aListModel = (ArrayList<Model>) getIntent().getSerializableExtra(KEY);

MUST REMEMBER:

यहां मॉडल-क्लास को लागू किया जाना चाहिए: मॉडलक्लास लागू होता है


आम तौर पर शुरू करने के लिए इरादा भेजा जा रहा है। सक्रियता : Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, aListModel);
ध्रुव रावल

5

मान लें कि आपको निम्न गतिविधि से अगली गतिविधि के लिए अगली कक्षा की एक सरणी सूची पास करने की आवश्यकता है // सरणी सूची में उन वस्तुओं का वर्ग // याद रखें कि वर्ग को सीरियल योग्य इंटरफ़ेस से लागू करना याद रखें // सीरियल का मतलब यह ऑब्जेक्ट को बाइट्स की धारा में परिवर्तित करता है और मदद करता है उस वस्तु को स्थानांतरित करने के लिए

public class Question implements Serializable {
... 
... 
...
}

आपकी वर्तमान गतिविधि में संभवतः आपके पास एक ArrayList है जो निम्नानुसार है

ArrayList<Question> qsList = new ArrayList<>();
qsList.add(new Question(1));
qsList.add(new Question(2));
qsList.add(new Question(3));

// intialize Bundle instance
Bundle b = new Bundle();
// putting questions list into the bundle .. as key value pair.
// so you can retrieve the arrayList with this key
b.putSerializable("questions", (Serializable) qsList);
Intent i = new Intent(CurrentActivity.this, NextActivity.class);
i.putExtras(b);
startActivity(i);

अगली गतिविधि के भीतर सरणी सूची प्राप्त करने के लिए

//get the bundle
Bundle b = getIntent().getExtras();
//getting the arraylist from the key
ArrayList<Question> q = (ArrayList<Question>) b.getSerializable("questions");

2
//arraylist/Pojo you can Pass using bundle  like this 
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle args = new Bundle();
                        args.putSerializable("imageSliders",(Serializable)allStoriesPojo.getImageSliderPojos());
                        intent.putExtra("BUNDLE",args);
 startActivity(intent); 


Get SecondActivity like this
  Intent intent = getIntent();
        Bundle args = intent.getBundleExtra("BUNDLE");
String filter = bundle.getString("imageSliders");

//Happy coding

2
    public class StructMain implements Serializable {
    public  int id;
    public String name;
    public String lastName;
}

यह मेरा आइटम है लागू करने योग्य और ArrayList बनाएँ

ArrayList<StructMain> items =new ArrayList<>();

और बंडल में डाल दिया

Bundle bundle=new Bundle();
bundle.putSerializable("test",items);

और एक नया आशय बनाएँ जो आशय में बंडल को रखे

Intent intent=new Intent(ActivityOne.this,ActivityTwo.class);
intent.putExtras(bundle);
startActivity(intent);

बंडल प्राप्त करने के लिए यह कोड डालें

Bundle bundle = getIntent().getExtras();
ArrayList<StructMain> item = (ArrayList<StructMain>) bundle.getSerializable("test");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.