将多个字符串传递给新的 activity 并在列表视图中显示它们。 Java、Android SDK
Passing multiple strings to a new activity and displaying them in a list view. Java, Android SDK
我已经设置并链接了我的 2 个活动。
我想做什么:
在我的第一个 activity 中获取生成的文本视图,将其转换为字符串,将其传递给我的另一个 activity,它与其他先前传递的文本视图一起显示在列表视图中的位置.
所以在我的第一个 activity 中,我目前有:
public void SaveMessage(View view) {
String saved = message.getText().toString();
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("message",message);
Toast.makeText(getApplicationContext(), R.string.addedfavs, Toast.LENGTH_SHORT).show();
}
但是我真的不知道该从何做起,我曾尝试将字符串存储在数组中或然后存储在数组列表中,但无济于事。
如果能提供有关如何接收每个字符串并将其存储在某种数组列表(因为数组具有固定大小)或随后可以在 ListView 中显示的任何格式的帮助,我们将不胜感激。
However I don't really know where to go from this,
首先你必须启动意图activity:
context.startActivity(intent);
然后,必要时,在 FirstActivity
或 SecondActivity
中,通过以下方式获取启动 activity 的意图:
Intent intent = getIntent();
现在,您还拥有具有该意图的附加功能。由于您拥有 String
s 的额外数据,请使用 intent.getStringExtra(String name)
方法。
你的情况:
String message = intent.getStringExtra("message");
I've looked at trying store the strings in arrays or then in array lists, but to no avail.
您还有其他额外的方法,例如 getStringArrayListExtra
to pass ArrayList<>
or getStringArrayExtra
来传递 Arrays
我无法正确理解你的问题,但根据我的理解,有两种解决方案。
解决方案一:
如果你想保存以前传递的文本,你可以使用数据库来实现。每当您将字符串从第一个 activity 传递到第二个时,将该文本存储在数据库中并从数据库中获取所有字符串并将其填充到列表中。
或者您可以将其保存在 arraylist 中并将数组列表保存到 SharedPreferences 中,例如:
public void addMessage(String message) {
if (currentMessages == null) {
currentMessages = new ArrayList<String>();
}
currentMessages.add(message);
//save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(MESSAGES, ObjectSerializer.serialize(currentMessages));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
public ArrayList<String> getMessages() {
if (currentMessages == null) {
currentMessages= new ArrayList<String>();
}
// load tasks from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
currentMessages = (ArrayList<String>) ObjectSerializer.deserialize(prefs.getString(MESSAGES, ObjectSerializer.serialize(new ArrayList<String>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
您可以将此数组列表用作适配器的数据源。
方案二:
如果有多个消息通过 intent 传递,那么使用这个:
ArrayList<String> messages = new ArrayList<String>();
messages.add(message1);
messages.add(message2);
.
.
.
messages.add(messageN);
然后使用此数组列表作为您的适配器的数据源。
已编辑:
SHARED_PREFS_FILE 可以是静态最终字符串,例如:
public 静态最终字符串 SHARED_PREFS_FILE = "sharedPrefsFile";
(所需的首选项文件。如果此名称的首选项文件不存在,将在您检索编辑器 (SharedPreferences.edit()) 时创建,然后提交更改 (Editor.commit( )))
您可以从 here 获取 ObjectSerializer class 并将其添加到您的项目中。
我已经设置并链接了我的 2 个活动。
我想做什么:
在我的第一个 activity 中获取生成的文本视图,将其转换为字符串,将其传递给我的另一个 activity,它与其他先前传递的文本视图一起显示在列表视图中的位置.
所以在我的第一个 activity 中,我目前有:
public void SaveMessage(View view) {
String saved = message.getText().toString();
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("message",message);
Toast.makeText(getApplicationContext(), R.string.addedfavs, Toast.LENGTH_SHORT).show();
}
但是我真的不知道该从何做起,我曾尝试将字符串存储在数组中或然后存储在数组列表中,但无济于事。
如果能提供有关如何接收每个字符串并将其存储在某种数组列表(因为数组具有固定大小)或随后可以在 ListView 中显示的任何格式的帮助,我们将不胜感激。
However I don't really know where to go from this,
首先你必须启动意图activity:
context.startActivity(intent);
然后,必要时,在 FirstActivity
或 SecondActivity
中,通过以下方式获取启动 activity 的意图:
Intent intent = getIntent();
现在,您还拥有具有该意图的附加功能。由于您拥有 String
s 的额外数据,请使用 intent.getStringExtra(String name)
方法。
你的情况:
String message = intent.getStringExtra("message");
I've looked at trying store the strings in arrays or then in array lists, but to no avail.
您还有其他额外的方法,例如 getStringArrayListExtra
to pass ArrayList<>
or getStringArrayExtra
来传递 Arrays
我无法正确理解你的问题,但根据我的理解,有两种解决方案。
解决方案一: 如果你想保存以前传递的文本,你可以使用数据库来实现。每当您将字符串从第一个 activity 传递到第二个时,将该文本存储在数据库中并从数据库中获取所有字符串并将其填充到列表中。 或者您可以将其保存在 arraylist 中并将数组列表保存到 SharedPreferences 中,例如:
public void addMessage(String message) {
if (currentMessages == null) {
currentMessages = new ArrayList<String>();
}
currentMessages.add(message);
//save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(MESSAGES, ObjectSerializer.serialize(currentMessages));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
public ArrayList<String> getMessages() {
if (currentMessages == null) {
currentMessages= new ArrayList<String>();
}
// load tasks from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
currentMessages = (ArrayList<String>) ObjectSerializer.deserialize(prefs.getString(MESSAGES, ObjectSerializer.serialize(new ArrayList<String>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
您可以将此数组列表用作适配器的数据源。
方案二: 如果有多个消息通过 intent 传递,那么使用这个:
ArrayList<String> messages = new ArrayList<String>();
messages.add(message1);
messages.add(message2);
.
.
.
messages.add(messageN);
然后使用此数组列表作为您的适配器的数据源。
已编辑:
SHARED_PREFS_FILE 可以是静态最终字符串,例如:
public 静态最终字符串 SHARED_PREFS_FILE = "sharedPrefsFile";
(所需的首选项文件。如果此名称的首选项文件不存在,将在您检索编辑器 (SharedPreferences.edit()) 时创建,然后提交更改 (Editor.commit( )))
您可以从 here 获取 ObjectSerializer class 并将其添加到您的项目中。