我创建了一个Android应用程序,其中我在edittext中给出的值将显示在listview上,但是当我点击返回另一个活动并返回到listview活动时,listview项目将消失。请告诉我如何在活动中永久保存listview项目。
以下是我的代码。
public class Edit extends Activity {
ArrayList listitems = new ArrayList(); ArrayAdapter适配器;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayShowHomeEnabled(false);
final EditText et=(EditText)findViewById(R.id.editText1);
Button bt=(Button)findViewById(R.id.button1);
ListView lv=(ListView)findViewById(R.id.listView1);
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listitems);
lv.setAdapter(adapter);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
listitems.add(et.getText().toString());
adapter.notifyDataSetChanged();
答案 0 :(得分:1)
当你说回来时,我假设你说你点击后退按钮。单击后退按钮将破坏当前活动,因此所有非持久性更改都将丢失,只是向适配器添加项目是非持久性更改。
因此,您必须以某种方式持久保存这些添加事件。在android中,有几种方法可以持久保存。如果您想保存很多活动,我建议您选择本地sqllite db,或者如果您不想担心保存这些活动,我会选择Shared Preferences。< / p>
因此,如果您决定使用共享首选项,则可以在代码中执行类似的操作:
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
listitems.add(et.getText().toString());
adapter.notifyDataSetChanged();
saveStringToPreferences(et.getText());
}
private void saveStringToPreferences(String str){
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("label", str);
editor.apply();
}
现在,当您返回活动时,将项目重新加载到列表中:
public void onResume(){
super.onResume();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String previousText = preferences.getString("label", "");
if(! TextUtils.isEmpty(previousText)){
listitems.add(et.getText().toString());
adapter.notifyDataSetChanged();
}
}