这是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更改活动并返回到ViewActivity时,ArrayList数据就消失了。
我想要的是保留我已经在InputActivity中输入的所有值。
希望您能理解我的意思:)
发布于 2018-07-15 10:22:34
你所做的事情实际上是非常非常糟糕的,因为你只是为你想要添加和创建的每个人创建了一个又一个活动。它浪费内存和电力。
相反,您应该简单地将结果从InputActivity返回给ViewActivity。
在ViewActivity中,不要调用startActivity(intent),而要使用startActivityForResult(intent, REQUEST_CODE)。然后覆盖onActivityResult(),这样就可以处理返回给ViewActivity的结果。
在InputActivity中,不要调用startActivity(),而是将intent返回给ViewActivity。
下面是一个这样的例子:
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);
//Init adapter
adapter = new PersonListAdapter(getApplicationContext(), mPersonList);
lvPerson.setAdapter(adapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
String name = data.getStringExtra("name");
String email = data.getStringExtra("email");
String address = data.getStringExtra("address");
mPersonList.add(new Person(name, email, address));
adapter.notifyDataSetChanged();
Toast.makeText(getApplicationContext(), "Data berhasil ditambahkan", Toast.LENGTH_SHORT).show();
}
}
}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();
intent.putExtra("add", true);
intent.putExtra("name", strName);
intent.putExtra("email", strEmail);
intent.putExtra("address", strAddress);
setResult(RESULT_OK, intent);
finish();
}
}这样做可以避免再次重新创建ViewActivity,因此您不必重新创建所有视图和重新填充列表。您只需重用现有的ViewActivity并将结果添加到现有列表中。
https://stackoverflow.com/questions/51344683
复制相似问题