Java 如何使用共享首选项保存listview

Java 如何使用共享首选项保存listview,java,sharedpreferences,Java,Sharedpreferences,我制作了一个简单的购物列表应用程序,用户可以在其中向列表视图添加项目。我的问题是,当我离开应用程序时,项目不会保存。我想我需要使用一个共享的首选项,但还没有太多的外观来实现它(我对编码是相当陌生的),如果有人知道如何实现共享的首选项,那么我的项目将保存它将不胜感激 我的代码: public class CreateAList extends AppCompatActivity { //ArrayList for data private ArrayList<String&g

我制作了一个简单的购物列表应用程序,用户可以在其中向列表视图添加项目。我的问题是,当我离开应用程序时,项目不会保存。我想我需要使用一个共享的首选项,但还没有太多的外观来实现它(我对编码是相当陌生的),如果有人知道如何实现共享的首选项,那么我的项目将保存它将不胜感激

我的代码:

public class CreateAList extends AppCompatActivity {
    //ArrayList for data
    private ArrayList<String> list = new ArrayList<>();
    ListView list_view;
    ArrayAdapter arrayAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_alist);
        //find view by id
        list_view = findViewById(R.id.list_view);
        arrayAdapter = new ArrayAdapter(CreateAList.this, android.R.layout.simple_list_item_1,list);
        list_view.setAdapter(arrayAdapter);



        list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(final AdapterView<?> adapterView, View view, final int i, long l) {

                //Inflating is the process of adding a view(.xml) to activity on runtime
                PopupMenu popupMenu = new PopupMenu(CreateAList.this,view);
                popupMenu.getMenuInflater().inflate(R.menu.pop_up_menu,popupMenu.getMenu());

                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {

                            switch (menuItem.getItemId()){

                                case R.id.item_update:
                                    //function for update
                                    AlertDialog.Builder builder = new AlertDialog.Builder(CreateAList.this);
                                    View v = LayoutInflater.from(CreateAList.this).inflate(R.layout.item_dialog,null,false);
                                    builder.setTitle("Update Item");
                                    final EditText editText = v.findViewById(R.id.editItem);
                                    editText.setText(list.get(i));


                                    //set custom view to dialog
                                    builder.setView(v);

                                    builder.setPositiveButton("Update", new DialogInterface.OnClickListener(){
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            if (!editText.getText().toString().isEmpty()){
                                                list.set(i, editText.getText().toString().trim());
                                                arrayAdapter.notifyDataSetChanged();
                                                Toast.makeText(CreateAList.this, "Item Updated", Toast.LENGTH_SHORT).show();
                                            }else{
                                                editText.setError("add item here!");
                                            }
                                        }
                                    });

                                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int i) {
                                            dialog.dismiss();
                                        }
                                    });

                                    builder.show();

                                    break;

                                case R.id.item_delete:
                                    //function for delete
                                    Toast.makeText(CreateAList.this, "Item Deleted", Toast.LENGTH_SHORT).show();
                                   list.remove(i);
                                   arrayAdapter.notifyDataSetChanged();

                                   break;

                            }

                        return true;
                    }
                });
                    popupMenu.show();
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()){
            case R.id.add_item:

                //function to add

                addItem();

                break;

        }

        return true;
    }
//method for adding item
    private void addItem() {
        AlertDialog.Builder builder = new AlertDialog.Builder(CreateAList.this);
        builder.setTitle("Add new Item");

        View v = LayoutInflater.from(CreateAList.this).inflate(R.layout.item_dialog,null,false);

        builder.setView(v);
        final EditText editItem = v.findViewById(R.id.editItem);
        builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                if (!editItem.getText().toString().isEmpty()){
                    list.add(editItem.getText().toString().trim());
                    arrayAdapter.notifyDataSetChanged();
                }else{
                    editItem.setError("Add Item Here!");
                }

            }
        });
}
公共类CreateAList扩展了AppCompative活动{
//数据的ArrayList
private ArrayList list=new ArrayList();
列表视图列表视图;
ArrayAdapter ArrayAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u create\u列表);
//按id查找视图
列表视图=findviewbyd(R.id.list\u视图);
arrayAdapter=newarrayadapter(CreateAList.this,android.R.layout.simple\u list\u item\u 1,list);
list_view.setAdapter(arrayAdapter);
list_view.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(最终适配器视图AdapterView、视图视图、最终int i、长l){
//膨胀是在运行时向活动添加视图(.xml)的过程
PopupMenu=新的PopupMenu(CreateAList.this,view);
充气(右菜单。弹出菜单,弹出菜单。getMenu());
setOnMenuItemClickListener(新的popupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(MenuItem MenuItem){
开关(menuItem.getItemId()){
案例R.id.item_更新:
//更新功能
AlertDialog.Builder=新建AlertDialog.Builder(createList.this);
视图v=LayoutInflater.from(CreateAList.this).充气(R.layout.item_对话框,null,false);
建造商。设置标题(“更新项目”);
最终编辑文本编辑文本=v.findViewById(R.id.editItem);
setText(list.get(i));
//将自定义视图设置为对话框
builder.setView(v);
setPositiveButton(“更新”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
如果(!editText.getText().toString().isEmpty()){
set(i,editText.getText().toString().trim());
arrayAdapter.notifyDataSetChanged();
Toast.makeText(CreateAList.this,“项目更新”,Toast.LENGTH_SHORT.show();
}否则{
setError(“在此处添加项!”);
}
}
});
setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
@凌驾
公共void onClick(对话框接口对话框,int i){
dialog.dismise();
}
});
builder.show();
打破
案例R.id.项目\删除:
//删除功能
Toast.makeText(CreateAList.this,“项目已删除”,Toast.LENGTH_SHORT.show();
列表。删除(i);
arrayAdapter.notifyDataSetChanged();
打破
}
返回true;
}
});
show();
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单.主菜单,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.add_项目:
//要添加的函数
addItem();
打破
}
返回true;
}
//添加项目的方法
私有void addItem(){
AlertDialog.Builder=新建AlertDialog.Builder(createList.this);
建造商。设置标题(“添加新项目”);
视图v=LayoutInflater.from(CreateAList.this).充气(R.layout.item_对话框,null,false);
builder.setView(v);
最终编辑文本编辑项=v.findViewById(R.id.editItem);
setPositiveButton(“添加”,新建DialogInterface.OnClickListener()){
@凌驾
公共void onClick(DialogInterface,inti){
如果(!editItem.getText().toString().isEmpty()){
添加(editItem.getText().toString().trim());
arrayAdapter.notifyDataSetChanged();
}否则{
setError(“在此处添加项!”);
}
}
});
}

阅读共享首选项教程是个好主意。这样您将了解更多信息。还可以查找Android提供的用于存储数据的SQLite数据库。我认为,如果在列表视图中有简单对象,这将是更好的方法

这里有一个很好的教程:

这将是一个不错的选择
{
    SharedPreferences.Editor edit = getContext().getSharedPreferences("SHARED_PREFERENCE_NAME", 0).edit();
    edit.putStringSet(key, value);
    edit.apply();
}

void putSharedPreferencesStringSet(String key, String value)
{
    SharedPreferences.Editoredit = getContext().getSharedPreferences("SHARED_PREFERENCE_NAME", 0).edit();
    edit.putString(key, value);
    edit.apply();
}

String getSharedPreferencesString(String key)
{
    SharedPreferences prefs = AppConstants.appContext.getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, 0);
    return prefs.getString(key, 0);
}

void removeSharedPreferencesString(String key)
{
    SharedPreferences edit = AppConstants.appContext.getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, 0);
    edit.remove(key);
    edit.apply();

}