我已设置并链接了我的2个活动。
我想做的事情:
在我的第一个活动中获取生成的文本视图,将其转换为字符串,将其传递给我的其他活动,其中它显示在列表视图中,其中包含其他先前传递的文本视图。
所以在我目前的第一项活动中:
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();
}
但是我真的不知道从哪里开始,我已经看过尝试将字符串存储在数组中,然后存储在数组列表中,但无济于事。
如果接收每个字符串并将其存储在某种类型的arraylist中(因为数组具有固定大小)或任何可以在ListView中显示的格式,将非常感谢帮助。
答案 0 :(得分:2)
但是我真的不知道从哪里开始,
首先,您必须启动目标活动:
context.startActivity(intent);
然后,在必要时,在FirstActivity
或SecondActivity
中,获取开始您的活动的意图:
Intent intent = getIntent();
现在,你还有这个意图的额外内容。由于您有String
的额外数据,请使用intent.getStringExtra(String name)
方法。
在你的情况下:
String message = intent.getStringExtra("message");
我看过尝试将字符串存储在数组中,然后存储在数组列表中,但无济于事。
您还有其他额外的方法,例如getStringArrayListExtra
可以通过ArrayList<>
或getStringArrayExtra
来传递Arrays
答案 1 :(得分:1)
我无法正确理解你的问题,但根据我的理解,有两种解决方案。
解决方案1: 如果要保存以前传递的文本,可以使用db执行此操作。每当您将第一个活动的字符串传递给第二个活动时,将该文本存储在db中并从db获取所有字符串并填充列表中的字符串。 或者您可以将其保存在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();
}
}
您可以将此arraylist用作适配器的数据源。
解决方案2: 如果有多条消息通过intent传递,请使用:
ArrayList<String> messages = new ArrayList<String>();
messages.add(message1);
messages.add(message2);
.
.
.
messages.add(messageN);
然后使用此arraylist作为适配器的数据源。
编辑:
SHARED_PREFS_FILE可以是静态的最终字符串,如:
public static final String SHARED_PREFS_FILE =&#34; sharedPrefsFile&#34 ;;
(所需的首选项文件。如果此名称的首选项文件不存在,则会在您检索编辑器(SharedPreferences.edit())然后提交更改(Editor.commit())时创建它。)
您可以从here获取ObjectSerializer类并将其添加到您的项目中。