4

SQLite 데이터베이스의 항목을 Listview에 표시합니다. 항목 추가를 위해 AlertDialog를 사용합니다. ALERTDialog에서 데이터베이스에 항목을 저장하고 데이터베이스의 데이터로 List (userLists)를 새로 고칩니다. 그런 다음 notifyDataSetChanged를 사용하지만 뷰가 변경되지 않습니다.AlertDialog에서 ArrayAdapter notifyDataSetChanged가 작동하지 않습니다.

public class MediUserListsFragment extends Fragment { 

    private MediDAO mediDAO; 
    private ListView listView; 
    private List<UserList> userLists; 
    private ArrayAdapter<UserList> adapter; 

    @Override 
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     getActivity().setTitle("Medikamenten Listen"); 

     final View view = inflater.inflate(R.layout.fragment_medi_user_list, container, false); 

     setHasOptionsMenu(true); 

     mediDAO = new MediDAO(getContext()); 

     userLists = mediDAO.getAllUserList(); 

     listView = (ListView) view.findViewById(R.id.list_view); 

     adapter = new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1, userLists); 
     listView.setAdapter(adapter); 

     Button newLstBtn = (Button) view.findViewById(R.id.new_list_button); 
     newLstBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       View alertLayout = inflater.inflate(R.layout.dialog_medi_list_new, null); 
       final EditText newLstName = (EditText) alertLayout.findViewById(R.id.newListName); 
       AlertDialog.Builder alert = new AlertDialog.Builder(getContext()); 
       alert.setTitle("Neue Liste"); 
       alert.setView(alertLayout); 
       alert.setCancelable(false); 
       alert.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
        } 
       }); 
       alert.setPositiveButton("Erstellen", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         mediDAO.newUserList(newLstName.getText().toString()); 
         userLists = mediDAO.getAllUserList(); 
         adapter.notifyDataSetChanged(); 
        } 
       }); 
       AlertDialog dialog = alert.create(); 
       dialog.show(); 
      } 
     }); 

     return view; 
    } 

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     menu.clear(); 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.fragment_medi_abc, menu); 
    } 
} 
+0

알림 대화 상자 데이터를 수집하고 목록보기 (예 : thelist.add (thedata);)에 새 항목을 추가하기 만하면됩니다. – Tasos

답변

4

setPositiveButton에서 다음을 시도하십시오.

userLists.clear(); 
userLists.addAll(mediDAO.getAllUserList());      
adapter.notifyDataSetChanged(); 

당신이 어댑터 userLists = mediDAO.getAllUserList();을하고 있었다 ( userLists입니다) 원본 데이터 객체의 참조를 푼다. userLists.addAll()을 사용하면 어댑터는 작성한 데이터 객체가 변경된 것을 알고 notifyDataSetChanged는 변경 사항을 발견하여 알립니다.

+0

Thx. 잘 작동합니다. – Laire

+0

다행이었습니다. 나는 또한 몇 줄의 설명으로 대답을 업데이트했다. – fluffyBatman

관련 문제