将多个字符串传递给新活动并在列表视图中显示它们。 Java,Android SDK

时间:2015-09-30 10:02:19

标签: java android listview arraylist sdk

我已设置并链接了我的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中显示的格式,将非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

  

但是我真的不知道从哪里开始,

首先,您必须启动目标活动:

context.startActivity(intent);

然后,在必要时,在FirstActivitySecondActivity中,获取开始您的活动的意图:

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类并将其添加到您的项目中。