java - 在 Android 中更改 Activity 时如何保持 ArrayList 值

标签 java android arrays android-studio arraylist

这是ViewActivity

public class ViewActivity extends AppCompatActivity {

    private ListView lvPerson;
    private PersonListAdapter adapter;
    public List<Person> mPersonList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);

        lvPerson = (ListView)findViewById(R.id.listView);

        //Add new person
        Intent intent = getIntent();
        if(intent.hasExtra("add")){
            String name = intent.getStringExtra("name");
            String email = intent.getStringExtra("email");
            String address = intent.getStringExtra("address");
            mPersonList.add(new Person(name, email, address));
            Toast.makeText(getApplicationContext(), "Data berhasil ditambahkan", Toast.LENGTH_SHORT).show();
        }

        //Init adapter
        adapter = new PersonListAdapter(getApplicationContext(), mPersonList);
        lvPerson.setAdapter(adapter);

    }
}

这是 InputActivity

public class InputActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input);
    }

    public void saveButtonClicked(View view){

        EditText name = (EditText) findViewById(R.id.editTextName);
        EditText email = (EditText) findViewById(R.id.editTextEmail);
        EditText address = (EditText) findViewById(R.id.editTextAddress);

        String strName = name.getText().toString();
        String strEmail = email.getText().toString();
        String strAddress = address.getText().toString();

        Intent intent = new Intent(this, ViewActivity.class);
        intent.putExtra("add", true);
        intent.putExtra("name", strName);
        intent.putExtra("email", strEmail);
        intent.putExtra("address", strAddress);
        startActivity(intent);

    }
}

显示我的流程是在 InputActivity 中单击保存按钮时,它将在 ViewActivity 中运行“添加人员”代码并将数据从表单添加到 ArrayList。

这是可行的,但是当我使用 Intent 更改 Activity 并返回到 ViewActivity 时,ArrayList 数据消失了。

我想要的是保留我已经在 InputActivity 中输入的所有值。

希望你明白我的意思:)

最佳答案

这里有一些很好的答案,但由于您只希望它在一个应用程序 session 期间持续存在,我将添加另一种方法,一个用于保存数据的单例:

class DataHolder {
    final List<Person> people = new ArrayList<>;

    private DataHolder() {}

    static DataHolder getInstance() {
        if( instance == null ) {
            instance = new DataHolder();
        }
        return instance;
    }

    private static DataHolder instance;
}

在任一 Activity 中(或您应用中的任何地方),您都可以访问人员列表

List<Person> ppl = DataHolder.getInstance().people;

例如,你会替换

public List<Person> mPersonList = new ArrayList<>();

// not sure why that was public...
private List<Person> mPersonList = DataHolder.getInstance().people;

它只会持续您当前的应用程序 session ,但如果您想在将来保存它们,您可以向 DataHolder 添加一个后端数据库,这样每次您添加一个人时它都会自动保存在某个地方。

关于java - 在 Android 中更改 Activity 时如何保持 ArrayList 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344683/

相关文章:

android - 新生成的代码 "This was auto-generated to implement the App Indexing API."是什么?

php - 使用通配符搜索数组键

javascript - 从一个键重复且另一个键小于另一个键的数组中删除对象

java - 服务器端Java错误

java - 从 JPA 2.1 升级到 JPA 2.2

java - 当启动的 Activity 完成时,启动新 Activity 的 startActivityForResult 是否通知调用 Activity?

android - 在 "error: closed"上两次获取 "adb reverse"

ruby - 如何按空格或制表符拆分命令输出?

java - 用于在线 cab 项目的 Node.js 或 Java

java - 使用动态缓冲区? java