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