0

У меня есть несколько List<String> переменных перейти от Splash к Основной вид деятельности:Android: Как передать MULTIPLE ArrayList <String> значения и один ArrayList <LatLng> из одной активности в другую в комплекте? Не работает

1) я прочитал где-то, что я могу передать их в качестве ArrayList<String> от Splash к Main, и это работает ... т.е. I может принимать только первую переменную ArrayList<String>. В моем списке ниже, я не могу получить второй ArrayList<String>. (array_list2) Почему?

2) Как передать ArrayList<LatLng> от одного вида деятельности к другому

Первая активность:

Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
Bundle b=new Bundle(); 
b.putStringArrayList("array_list1",(ArrayList<String>)Names);  
b.putStringArrayList("array_list2",(ArrayList<String>)City); 
b.putStringArrayList("array_list3",(ArrayList<String>)Country); 
b.putStringArrayList("array_list4",(ArrayList<String>)Code); 
b.putStringArrayList("array_list5",(ArrayList<LatLng>)coordinates); //ERROR in this line, type mismatch! 
intent.putExtras(b); 
startActivity(intent); 

Вторая активность:

Bundle b = getIntent().getExtras(); 
if (b != null) { 
testList1 = b.getStringArrayList("array_list1"); 
testList2 = b.getStringArrayList("array_list2"); //THIS gives the same arraylist as testList1 and it is incorrect! 
Log.e("TESTLIST1",testList1.toString()); //just using Log.e to view o/p as test 
Log.e("TESTLIST2",testList1.toString()); 

Пожалуйста, ответьте на оба мои вопросы , Ни одна из других тем не помогла мне, и я потратил более 2 часов на это. Спасибо.

+0

Зачем бросать каждый объект в 'ArrayList '? –

+0

Только ArrayList поддерживается методом putStringArrayList, и нет другого метода для списка Zac1

ответ

1

putStringArrayList() не будет поддерживать для ArrayList.

использование

putParcelableArrayList(); 

вместо

putStingArrayList(); 

или еще вы можете использовать прямой метод намерения.

Изменить код somethng так:

Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
Bundle b=new Bundle(); 
b.putStringArrayList("array_list1",(ArrayList<String>)Names);  
b.putStringArrayList("array_list2",(ArrayList<String>)City); 
b.putStringArrayList("array_list3",(ArrayList<String>)Country); 
b.putStringArrayList("array_list4",(ArrayList<String>)Code); 

Если вы хотите, чтобы пройти через использование объекта расслоением ниже строки кода.

b.putParcelableArrayList("array_list5",(ArrayList<LatLng>)coordinates); 

В противном случае проходит через объект намерения.

intent.putParcelableArrayListExtra("array_list5",coordinates); 
intent.putExtras(b); 
startActivity(intent); 
+0

Можете ли вы объяснить для первого и второго видов деятельности как для списка , так и для ArrayList ? Является ли "intent.putExtras (b)"; верный? – Zac1

+0

да ... в методе putExtras() вам необходимо передать объект пакета ... –

+0

intent, putExtras (b); является правильным только. Класс LatLng - это произвольный класс, поэтому следует использовать putParcelableArrayList («array_list5», координаты); –

1

Поскольку LatLng класс реализует интерфейс Parcelable, поэтому вместо того, чтобы использовать Bundle. putStringArrayList использовать Bundle.putParcelableArrayList для отправки ArrayList, который содержит объект класса, который реализующий Parcelable интерфейс. Используйте

b.putParcelableArrayList("array_list5",coordinates); 

How to use parcelable with List or ArrayList - What is the syntax?

ли как:

ArrayList<String> arrCoordinates = new ArrayList<>(coordinates.size()); 
arrCoordinates.addAll(coordinates); 
b.putParcelableArrayList("array_list5",arrCoordinates); 

и получить array_list5, как от Bundle

ArrayList<LatLng> coordinates = b.getParcelableArrayList("array_list5"); 
+0

Можете ли вы объяснить для первого и второго видов деятельности как для списка , так и для ArrayList ? Является ли "intent.putExtras (b)"; верный? – Zac1

+0

@ Zac1: мой вопрос: «Зачем бросать каждый объект в ArrayList ? ' –

+0

только ArrayList поддерживается с помощью метода putStringArrayList и нет другого способа Список Zac1