Android-ListView不刷新
我有一个fragment类,包含一个按钮和Listview,当单击按钮时,一个DialogFragment将出现在fragment类的顶部。它将接受用户输入并将其添加到数据库中,一切正常,但是listview不更新,我知道我需要调用适配器。notifyDataChange()我将编写psudeo代码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)
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
。我需要在哪里调用它?在我的自定义适配器中?