Android Listview和数据更新
我有个问题。 我正在编写一个应用程序,向内容提供商添加记录。 内容提供商工作正常。 我的问题是当我试图将一些数据插入listview时。它插入,但我无法看到数据,除非我重新启动应用程序。 我正在从适配器调用notifydatasetchanged,但它不起作用Android Listview和数据更新,android,listview,loader,notifydatasetchanged,Android,Listview,Loader,Notifydatasetchanged,我有个问题。 我正在编写一个应用程序,向内容提供商添加记录。 内容提供商工作正常。 我的问题是当我试图将一些数据插入listview时。它插入,但我无法看到数据,除非我重新启动应用程序。 我正在从适配器调用notifydatasetchanged,但它不起作用 public class MainActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> { ListVi
public class MainActivity extends Activity implements
LoaderManager.LoaderCallbacks<Cursor> {
ListView listContacts;
ListView listView;
Button addContactButton;
MyAdapter adapter;
ContentValues values;
ContentResolver contentResolver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contentResolver = getContentResolver();
listView = (ListView) findViewById(R.id.listView1);
values = new ContentValues();
getLoaderManager().initLoader(0, null, this);
addContactButton = (Button) findViewById(R.id.button1);
addContactButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialogForm = new Dialog(v.getContext());
dialogForm.setTitle("Add a new Address");
dialogForm.setContentView(R.layout.dialog);
dialogForm.show();
Button saveButton = (Button) dialogForm
.findViewById(R.id.saveButton);
final EditText addressEditText = (EditText) dialogForm
.findViewById(R.id.addressEditText);
saveButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
values.put(Contract.DATA, addressEditText.getText()
.toString());
contentResolver.insert(
Contract.CONTENT_URI, values);
values.clear();
dialogForm.dismiss();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
((MyAdapter)listView.getAdapter()).notifyDataSetChanged() ;
}
});
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return new CursorLoader(this, Contract.CONTENT_URI, null, null, null,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter = new MyAdapter(this, R.layout.list_item, cursor, 0);
listView.setAdapter(adapter);
adapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
有人能给我一个关于这个问题的线索吗?
另外,我还有一个问题。onLoadFinished方法的实现是否高效
问候语您需要调用restartLoader来刷新listview中的数据
当您更改ContentProvider数据时,必须调用getLoaderManager.restartLoader。它将丢弃任何旧数据,并再次调用onCreateLoader,后者将获取更新的记录,并更新ListView
下面是关于装载机的不错的教程
那是非常有用的Vipul,教程也很棒。我添加了getLoaderManager.restartLoader0,null,MainActivity.this;对于对话框的按钮,已成功!!