Передача ArrayList массивов строк от одного действия к другому в Android
Я хочу передать ArrayList строковых массивов из одного действия в другое в Android.
Как я могу использовать intent
или же bundle
? Пожалуйста, учтите, что intent.putStringArrayListExtra
в этом случае не работает, потому что это не для строковых массивов.
4 ответа
Не уверен, что вы подразумеваете под "ArrayList из строковых массивов"
Если у вас есть строковый массив, проверьте ссылку ниже
Передача массива строк между действиями Android
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
ArrayList реализует Serializable
Вы можете использовать намерения
ArrayList<String> mylist = new ArrayList<String>();
Intent intent = new Intent(ActivityName.this, Second.class);
intent.putStringArrayListExtra("key", mylist);
startActivity(intent);
Извлечь
Intent i = getIntent();
ArrayList<String> list = i.getStringArrayListExtra("key");
public Intent putStringArrayListExtra (String name, ArrayList<String> value)
Добавьте расширенные данные к цели. Имя должно включать префикс пакета, например, приложение com.android.contacts будет использовать такие имена, как "com.android.contacts.ShowAll".
параметры
name The name of the extra data, with package prefix.
value The ArrayList data value.
Возвращает
Returns the same Intent object, for chaining multiple calls into a single statement.
Передать ArrayList массива String
String[] people = {
"Mike Strong",
"Jennifer Anniston",
"Tom Bennet",
"Leander Paes",
"Liam Nesson",
"George Clooney",
"Barack Obama",
"Steve Jobs",
"Larry Page",
"Sergey Brin",
"Steve Wozniak"
};
String[] people1 = {
"raghu",
"hello"
};
ArrayList<String[]> list = new ArrayList<String[]>();
list.add(people);
list.add(people1);
Intent i = new Intent(MainActivity.this,SecondActivity.class);
i.putExtra("key", list);
startActivity(i);
Извлечь
Intent in = getIntent();
ArrayList<String[]> list =(ArrayList<String[]>) in.getSerializableExtra("key");
for(int i=0;i<list.size();i++)
{
String s[]= list.get(i);
for(int iv=0;iv<s.length;iv++)
Log.i("..............:",""+s[iv]);
}
Я не знаю, выполнимо ли это или нет, так как с классом Bundle дела обстоят не так, поэтому я бы реализовал пользовательский объект для размещения вашего ArrayList. Это хорошее чистое решение для размещения других общих данных, к которым вам необходимо получить доступ в обеих операциях.
public class MyCustomData implements Serializable {
static final long serialVersionUID = 42432432L;
public ArrayList<String[]> strings = new ArrayList<String[]>();
public MyCustomData() {
};
}
а затем в вашей деятельности:
MyCustomData myCustomDataInstance = new MyCustomData();
myCustomDataInstance.strings = //set it here;
Bundle bundle = new Bundle();
Intent selectedIntent = new Intent(getActivity(), MyNextClass.class);
bundle.putSerializable("key", myCustomDataInstance);
selectedIntent.putExtras(bundle);
startActivity(selectedIntent);
Также я хотел бы предложить использовать ArrayList Arraylists вместо Arraylist массивов
То есть вы хотите передать массив строк, а не список строк, верно? поскольку ArrayList
Сериализуем, вы можете добавить его довольно легко:
ArrayList<String[]> list = new ArrayList<String[]>();
// Add some String[]
Intent i = new Intent();
i.putExtra("xxx", list);
// And to get it back
ArrayList<String[]> list = (ArrayList<String[]>) i.getSerializableExtra("xxx");
Эта проблема имеет простое решение, вы можете просто объявить ArrayList public & static в вашем первом действии, а затем вызвать его в другом.
В вашей первой деятельности
public static ArrayList<String> myList = new ArrayList();
myList.add("some_value");
Во втором занятии
Toast.makeText(getApplicationContext(),FirstActivity.myList.size().toString(),Toast.LENGTH_SHORT).show();