4

私のSQLiteデータベースのアイテムをListviewに表示します。アイテムを追加するために、私はAlertDialogを使用します。 ALertDialogでは、データベースにアイテムを保存し、データベースのデータでList(ユーザーリスト)を更新します。私は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

関連する問題