Java 在SharedReferences中的存储列表上应用notifyDataSetChanged

Java 在SharedReferences中的存储列表上应用notifyDataSetChanged,java,android,arrays,arraylist,Java,Android,Arrays,Arraylist,我的listview有一个问题,单击“添加新”按钮时,我正在用用户在对话框中输入的内容填充我的listview。单击此按钮时,会出现一个对话框,要求用户在按done时输入内容。即使我将notifyDataSetChanged设置为notifyDataSetChanged,他/她输入的内容也不会出现在列表中的视图中。用户输入的内容仅在片段重新启动时显示。我认为这可能涉及到SharedReferences中的保存,这是代码中的tinyDB。如何确保存储的列表注意到notifyDataSetChang

我的listview有一个问题,单击“添加新”按钮时,我正在用用户在对话框中输入的内容填充我的listview。单击此按钮时,会出现一个对话框,要求用户在按done时输入内容。即使我将notifyDataSetChanged设置为notifyDataSetChanged,他/她输入的内容也不会出现在列表中的视图中。用户输入的内容仅在片段重新启动时显示。我认为这可能涉及到SharedReferences中的保存,这是代码中的tinyDB。如何确保存储的列表注意到notifyDataSetChanged。多谢各位

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_year_two_my_courses_first_semester, container, false);
    btnAddNew = (Button)rootView.findViewById(R.id.btnAddNewYearTwoFirstSemester);
    btnSave = (Button)rootView.findViewById(R.id.btnSaveAddedSubjectsFirstSemesterYr2);
    listView = (ListView)rootView.findViewById(R.id.listViewSubjectsMyCoursesFirstSemesterYr2);
    tinyDB = new TinyDB(getContext());
    storedList = new ArrayList<>(tinyDB.getListString("storedList1stYr2"));
    storedArray = new ArrayList<>();
    generalList = new ArrayList<>();

    generalList.addAll(storedArray);
    generalList.addAll(storedList);



    getActivity().setTitle("Year Two");

    setHasOptionsMenu(true);

    btnAddNew.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            btnSave.setVisibility(View.VISIBLE);
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext(),R.style.DialogeTheme);
            // Setting Dialog Title
            alertDialog.setTitle("Add new");

            // Setting Dialog Message
            String getUsername = tinyDB.getString("Username");
            alertDialog.setMessage("Hello "+ getUsername + ", please write the new subject");
            final EditText input = new EditText(getContext());
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            input.setLayoutParams(lp);
            input.setTextColor(Color.parseColor("#f06292"));
            alertDialog.setView(input);
            alertDialog.setPositiveButton("Add", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    String getSubjectInput = input.getText().toString();
                    storedList.add(getSubjectInput);
                    tinyDB.putListString("storedList1stYr2", storedList);
                    arrayAdapter.notifyDataSetChanged();


                }
            });

            alertDialog.setNegativeButton("CANCEL",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                            dialog.cancel();
                        }
                    });
            // Showing Alert Message
            alertDialog.create();
            alertDialog.show();

        }
    });
    arrayAdapter = new CustomListAdapter(getContext(),generalList);
    listView.setAdapter(arrayAdapter);
    arrayAdapter.notifyDataSetChanged();


    return rootView;
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u year\u my\u courses\u first\u学期,容器,false);
btnAddNew=(按钮)rootView.findviewbyd(R.id.btnaddnewyeartwoorstexterm);
btnSave=(按钮)rootView.findviewbyd(R.id.btnSaveAddedSubjectsFirstSemesterYr2);
listView=(listView)rootView.findViewById(R.id.listViewSubjectsMyCoursesFirstSemesterYr2);
tinyDB=新的tinyDB(getContext());
storedList=newarraylist(tinyDB.getListString(“storedList1stYr2”);
storedArray=新的ArrayList();
generalList=新的ArrayList();
总会计师addAll(storedArray);
generalList.addAll(存储列表);
getActivity().setTitle(“第二年”);
设置选项菜单(真);
btnAddNew.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
btnSave.setVisibility(View.VISIBLE);
AlertDialog.Builder AlertDialog=新建AlertDialog.Builder(getContext(),R.style.DialogeTheme);
//设置对话框标题
alertDialog.setTitle(“添加新”);
//设置对话框消息
字符串getUsername=tinyDB.getString(“用户名”);
setMessage(“Hello”+getUsername+”,请写下新主题);
最终编辑文本输入=新编辑文本(getContext());
LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_父级,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
input.setTextColor(Color.parseColor(#f06292”);
alertDialog.setView(输入);
alertDialog.setPositiveButton(“添加”,新建DialogInterface.OnClickListener()){
@凌驾
公共void onClick(DialogInterface,inti){
字符串getSubjectInput=input.getText().toString();
添加(getSubjectInput);
tinyDB.putListString(“storedList1stYr2”,storedList);
arrayAdapter.notifyDataSetChanged();
}
});
alertDialog.setNegativeButton(“取消”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.cancel();
}
});
//显示警报消息
alertDialog.create();
alertDialog.show();
}
});
arrayAdapter=新的CustomListAdapter(getContext(),generalList);
setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
返回rootView;
}

您的CustomListAdapter正在观察generalList,当您在storedList中添加新字符串时,generalList不会更改

您可以这样做:

public void onClick(DialogInterface dialogInterface, int i) {
                String getSubjectInput = input.getText().toString();
                storedList.add(getSubjectInput);
                tinyDB.putListString("storedList1stYr2", storedList);

                generalList.add(getSubjectInput);
                arrayAdapter.notifyDataSetChanged();
            }
或者清除并重置您的列表