刷新后将数据保留在 ListView 中 - Android Studio
我有一个主要活动和 PersonListView 活动。在主活动中,有一些输入文本,当单击保存按钮时,它将发送数据并保存到列表视图。好吧,我在将数据保留在该列表视图中时遇到一些麻烦,因为每次我返回主活动并返回列表视图时,旧数据都会消失。有没有办法保存数据但不使用数据库。
这是我的主要活动:
public class MainActivity extends AppCompatActivity {
String str, gender, vaccine, date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button okay = (Button) findViewById(R.id.btnOk);
Button list = (Button) findViewById(R.id.btnList);
EditText name = (EditText) findViewById(R.id.inputName);
EditText address = (EditText) findViewById(R.id.inputAdd);
EditText phone = (EditText) findViewById(R.id.inputPhone);
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
RadioButton female = (RadioButton) findViewById(R.id.inputFemale);
RadioButton male = (RadioButton) findViewById(R.id.inputMale);
CheckBox first = (CheckBox)findViewById(R.id.inputFirst);
CheckBox second = (CheckBox)findViewById(R.id.inputSecond);
CheckBox third = (CheckBox)findViewById(R.id.inputThird);
EditText datefirst = (EditText) findViewById(R.id.dateFirst);
EditText datesecond = (EditText) findViewById(R.id.dateSecond);
EditText datethird = (EditText) findViewById(R.id.dateThird);
TextView result = (TextView)findViewById(R.id.textResult);
okay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(female.isChecked()) gender = female.getText().toString();
if(male.isChecked()) gender = male.getText().toString();
if(first.isChecked()) {
vaccine = first.getText().toString();
date = datefirst.getText().toString();
}
if(second.isChecked()) {
vaccine = second.getText().toString();
date = datesecond.getText().toString();
}
if(third.isChecked()) {
vaccine = third.getText().toString();
date = datethird.getText().toString();
}
str = name.getText().toString() + "\n" + address.getText().toString() + "\n" + phone.getText().toString() + "\n" +
gender + "\n" + vaccine + "\n" + date;
result.setText(str);
Toast.makeText(getApplicationContext(),result.getText().toString(),Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, PersonView.class);
intent.putExtra("NAME",name.getText().toString());
intent.putExtra("ADDRESS",address.getText().toString());
intent.putExtra("PHONE",phone.getText().toString());
intent.putExtra("GENDER",gender);
intent.putExtra("VACCINE",vaccine);
intent.putExtra("DATE",date);
startActivity(intent);
}
});
这是 ListView 活动:
public class PersonView extends AppCompatActivity {
ArrayList<Person> listPerson;
PersonListViewAdapter personListViewAdapter;
ListView listViewPerson;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
Button back = findViewById(R.id.btnBack);
back.setOnClickListener(view -> {
Intent intent = new Intent(PersonView.this, MainActivity.class);
startActivity(intent);
});
listPerson = new ArrayList<>();
listPerson.add(new Person("Lieu Mai","25 Tran Quang Dieu", "0786367073", "female","3 injection", "24/07/2000"));
personListViewAdapter = new PersonListViewAdapter(listPerson);
listViewPerson = findViewById(R.id.listPerson);
listViewPerson.setAdapter(personListViewAdapter);
updateList();
}
private void updateList()
{
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if(bundle != null)
{
Person newPerson = new Person((String)bundle.get("NAME"), (String)bundle.get("ADDRESS"), (String)bundle.get("PHONE"), (String)bundle.get("GENDER"),(String)bundle.get("VACCINE"),(String)bundle.get("DATE"));
listPerson.add(newPerson);
personListViewAdapter.notifyDataSetChanged();
}
}
class Person {
String name, address, phone, gender, vaccine, date;
public Person( String name, String address, String phone, String gender, String vaccine, String date) {
this.name = name;
this.address = address;
this.phone = phone;
this.gender = gender;
this.vaccine = vaccine;
this.date = date;
}
}
class PersonListViewAdapter extends BaseAdapter {
final ArrayList<Person> listPerson;
PersonListViewAdapter(ArrayList<Person> listPerson) {
this.listPerson = listPerson;
}
@Override
public int getCount() {
return listPerson.size();
}
@Override
public Object getItem(int position) {
return listPerson.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View viewPerson;
if (convertView == null) {
viewPerson = View.inflate(parent.getContext(), R.layout.person_view, null);
} else viewPerson = convertView;
Person person = (Person) getItem(position);
((TextView) viewPerson.findViewById(R.id.txtName)).setText(String.format("Name: %s", person.name));
((TextView) viewPerson.findViewById(R.id.txtAddress)).setText(String.format("Address : %s", person.address));
((TextView) viewPerson.findViewById(R.id.txtPhone)).setText(String.format("Phone number: %s", person.phone));
((TextView) viewPerson.findViewById(R.id.txtGender)).setText(String.format("Gender: %s", person.gender));
((TextView) viewPerson.findViewById(R.id.txtVaccine)).setText(String.format("Vaccine: %s", person.vaccine));
((TextView) viewPerson.findViewById(R.id.txtDate)).setText(String.format("Date: %s", person.date));
return viewPerson;
}
}
}
I have a Main Activity and PersonListView Activity. In Main Activity, there are some input text and when click save button, it will send data and save to listview. Well, I have some trouble with keep data in that listview because everytime I return to main activity and comback to listview, the old data is gone. Is there anyway to save data but not use database.
Here is my Main Activity:
public class MainActivity extends AppCompatActivity {
String str, gender, vaccine, date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button okay = (Button) findViewById(R.id.btnOk);
Button list = (Button) findViewById(R.id.btnList);
EditText name = (EditText) findViewById(R.id.inputName);
EditText address = (EditText) findViewById(R.id.inputAdd);
EditText phone = (EditText) findViewById(R.id.inputPhone);
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
RadioButton female = (RadioButton) findViewById(R.id.inputFemale);
RadioButton male = (RadioButton) findViewById(R.id.inputMale);
CheckBox first = (CheckBox)findViewById(R.id.inputFirst);
CheckBox second = (CheckBox)findViewById(R.id.inputSecond);
CheckBox third = (CheckBox)findViewById(R.id.inputThird);
EditText datefirst = (EditText) findViewById(R.id.dateFirst);
EditText datesecond = (EditText) findViewById(R.id.dateSecond);
EditText datethird = (EditText) findViewById(R.id.dateThird);
TextView result = (TextView)findViewById(R.id.textResult);
okay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(female.isChecked()) gender = female.getText().toString();
if(male.isChecked()) gender = male.getText().toString();
if(first.isChecked()) {
vaccine = first.getText().toString();
date = datefirst.getText().toString();
}
if(second.isChecked()) {
vaccine = second.getText().toString();
date = datesecond.getText().toString();
}
if(third.isChecked()) {
vaccine = third.getText().toString();
date = datethird.getText().toString();
}
str = name.getText().toString() + "\n" + address.getText().toString() + "\n" + phone.getText().toString() + "\n" +
gender + "\n" + vaccine + "\n" + date;
result.setText(str);
Toast.makeText(getApplicationContext(),result.getText().toString(),Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, PersonView.class);
intent.putExtra("NAME",name.getText().toString());
intent.putExtra("ADDRESS",address.getText().toString());
intent.putExtra("PHONE",phone.getText().toString());
intent.putExtra("GENDER",gender);
intent.putExtra("VACCINE",vaccine);
intent.putExtra("DATE",date);
startActivity(intent);
}
});
And here is ListView Activity:
public class PersonView extends AppCompatActivity {
ArrayList<Person> listPerson;
PersonListViewAdapter personListViewAdapter;
ListView listViewPerson;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
Button back = findViewById(R.id.btnBack);
back.setOnClickListener(view -> {
Intent intent = new Intent(PersonView.this, MainActivity.class);
startActivity(intent);
});
listPerson = new ArrayList<>();
listPerson.add(new Person("Lieu Mai","25 Tran Quang Dieu", "0786367073", "female","3 injection", "24/07/2000"));
personListViewAdapter = new PersonListViewAdapter(listPerson);
listViewPerson = findViewById(R.id.listPerson);
listViewPerson.setAdapter(personListViewAdapter);
updateList();
}
private void updateList()
{
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if(bundle != null)
{
Person newPerson = new Person((String)bundle.get("NAME"), (String)bundle.get("ADDRESS"), (String)bundle.get("PHONE"), (String)bundle.get("GENDER"),(String)bundle.get("VACCINE"),(String)bundle.get("DATE"));
listPerson.add(newPerson);
personListViewAdapter.notifyDataSetChanged();
}
}
class Person {
String name, address, phone, gender, vaccine, date;
public Person( String name, String address, String phone, String gender, String vaccine, String date) {
this.name = name;
this.address = address;
this.phone = phone;
this.gender = gender;
this.vaccine = vaccine;
this.date = date;
}
}
class PersonListViewAdapter extends BaseAdapter {
final ArrayList<Person> listPerson;
PersonListViewAdapter(ArrayList<Person> listPerson) {
this.listPerson = listPerson;
}
@Override
public int getCount() {
return listPerson.size();
}
@Override
public Object getItem(int position) {
return listPerson.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View viewPerson;
if (convertView == null) {
viewPerson = View.inflate(parent.getContext(), R.layout.person_view, null);
} else viewPerson = convertView;
Person person = (Person) getItem(position);
((TextView) viewPerson.findViewById(R.id.txtName)).setText(String.format("Name: %s", person.name));
((TextView) viewPerson.findViewById(R.id.txtAddress)).setText(String.format("Address : %s", person.address));
((TextView) viewPerson.findViewById(R.id.txtPhone)).setText(String.format("Phone number: %s", person.phone));
((TextView) viewPerson.findViewById(R.id.txtGender)).setText(String.format("Gender: %s", person.gender));
((TextView) viewPerson.findViewById(R.id.txtVaccine)).setText(String.format("Vaccine: %s", person.vaccine));
((TextView) viewPerson.findViewById(R.id.txtDate)).setText(String.format("Date: %s", person.date));
return viewPerson;
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以将
listPerson
保存在共享首选项中,并在 PersonView Activity 中的oncreate
方法中检索它。You can save
listPerson
in shared preferences and retrieve it ononcreate
method in PersonView Activity.您可以使用
viewModel
并将其附加到您的 Activity 来保存您的列表,并且该列表将一直处于活动状态,直到您的应用程序实例处于活动状态。或者,您可以创建一个
伴生对象
列表,并且伴生对象
也会保持活动状态,直到应用程序的实例处于活动状态。从以上两个选项来看,viewModel 是最好的选择,因为伴随对象会导致内存泄漏问题。
但是,如果您想永久存储数据,则必须使用
数据库
或sharedPrefences
来永久保存您的值。You can use
viewModel
and attach it to your activity to save your list and the list will be alive till the instance of your app is alive.Or you can create a
companion object
list, andcompanion object
also remains alive till an instance of the app is alive.From both of the above options, viewModel is the best option because
companion object
will cause memory leaks issues.But if you want to permanently store your data either you have to use a
Database
orsharedPrefrences
to save your values permanently.