Android-ListView不刷新

Android-ListView不刷新,android,android-fragments,android-listview,android-dialogfragment,Android,Android Fragments,Android Listview,Android Dialogfragment,我有一个fragment类,包含一个按钮和Listview,当单击按钮时,一个DialogFragment将出现在fragment类的顶部。它将接受用户输入并将其添加到数据库中,一切正常,但是listview不更新,我知道我需要调用适配器。notifyDataChange()我将编写psudeo代码 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

我有一个fragment类,包含一个按钮和Listview,当单击按钮时,一个DialogFragment将出现在fragment类的顶部。它将接受用户输入并将其添加到数据库中,一切正常,但是listview不更新,我知道我需要调用适配器。notifyDataChange()我将编写psudeo代码

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_notes, container, false);

    add = (Button) view.findViewById(R.id.button1);

    add.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            //New DialogFragment show.dialog

        }
    });

    filllist(view);

    return view;
}
另一个类,创建我的DialogFragment

public Dialog onCreateDialog(Bundle savedInstanceState){


    final AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());

    final View view = getActivity().getLayoutInflater().inflate(R.layout.custom_layout, null);
    build.setView(view);

    build.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            final String text = ((EditText) view.findViewById(R.id.randomtext)).getText().toString();


                //Call insert method of database helper. pass user input
                //dismiss 
                adapter.notifyDataSetChanged();


        }
    });

    build.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dismiss();
        }
    });

    return dialog.create();

}

当用户填写完editText字段并按add时,在数据库中插入数据并取消dialogFragment,但它不更新/刷新listview,我在哪里可以调用notifyDataSetChanged()

在调用
notifyDataSetChanged
之前,您需要实际更改listview的备份数据。例如,如果按照以下方式创建适配器:

    mAdapter = new MyAdapter(context, R.layout.item_listview_layout, mData);

然后,您需要更新
mData
字段,然后才调用
notifyDataSetChanged

这是一个简单的解决方案。每次调用
notifyDataSetChanged()
之前,您都必须更新附加到适配器的列表。例如,如果您有函数命名
setListData()
,它为您填充适配器列表中的数据,那么您必须在
notifyDataSetChanged()
之前调用它。(注意setDataList()只是一个盲例,因为您没有共享此代码,所以代码可能会有所不同)


就这么简单!希望它能起作用✌

好的,那么我是否需要创建一个名为mAdapter=newmyadapter的新方法(context,R.layout.item\u listview\u layout,mData);然后adapter.notifyDataSetChanged。作为一个片段,我在onActivityCreated中调用这个方法吗?在我回答这个问题之前,你能发布一下DialogFragment中的
适配器
变量是如何初始化的吗?适配器只是我对一个列表视图的自定义布局,映射出在TextView中获得的数据,但我是通过CustomAdapter初始化的;创建CustomAdapter的实例。我很可能需要在ActivityCreated而非OnCreateView上调用片段类中的notifydatachange。在更新数据库并更新提供给CustomAdapter的任何数据(列表、数组等)后,您需要立即调用
notifyDataSetChanged
。我需要在哪里调用它?在我的自定义适配器中?