这是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/