我想将字符串数组的 ArrayList 从一个活动传递到 Android 中的另一个活动。
我该如何使用intent
或bundle
?请考虑intent.putStringArrayListExtra
在这种情况下不起作用,因为它不适用于字符串数组。
4 回答
不确定“字符串数组的 ArrayList”是什么意思
如果您有字符串数组,请检查以下链接
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[] 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
是可序列化的,您可以很容易地添加它:
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();