我正在使用从android电话簿中选择电话名称的功能,并使用光标来获取联系人的姓名和电话号码。我能够成功完成此操作,并将这些值插入到我在此处有关另一个问题的帮助下编写的sqllite数据库中,但是当向数据库中插入新值时,listview不会自动更新。
我已经使用了所有必需的行,包括
((BaseAdapter)display_contacts1.getAdapter()).notifyDataSetChanged();
display_contacts1.invalidateViews();
arrayAdapter.notifyDataSetChanged();
manageListView(getContext());
但是我仍然没有运气找到解决方案。 listview更新的唯一方法是进入另一个片段或重新启动应用程序。
原始SQL数据库代码 Android OnItemClick not working with loaded SQL Database into listview
SelectModemFragment.java
//--------------------------------------------------------------------
// Select Phone number from Contacts list
//--------------------------------------------------------------------
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
// Check for the request code
switch (reqCode)
{
case CONTACT_PICKER:
contactPicked(data);
break;
}
}
else
{
Log.e("MainActiivity", "Failed to pick contact");
}
}
private void contactPicked(Intent data)
{
//Cursor cursor = null;
try
{
// getData() method will have the Content Uri of the selected contact
Uri uri = data.getData();
//Query the content uri
cursor = getActivity().getApplicationContext().getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
// column index of the contact name
int nameIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
// column index of the phone number
int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
name = cursor.getString(nameIndex);
phoneNo = cursor.getString(phoneIndex);
// Show message displaying the contact selected from the phonebook
Toast.makeText(getContext(),name, Toast.LENGTH_SHORT).show();
Toast.makeText(getContext(), phoneNo, Toast.LENGTH_SHORT).show();
// Insert values to sqlite database
dbHelper.insert(name, phoneNo);
// Need to immediately update the listview one the values have been inserted into the database
((BaseAdapter)display_contacts1.getAdapter()).notifyDataSetChanged();
//display_contacts1.invalidateViews(); // This isn't working
//arrayAdapter.notifyDataSetChanged(); // This isn't working
//manageListView(getContext());, this didn't work
}
catch (Exception e)
{
e.printStackTrace();
}
}
答案 0 :(得分:0)
将值插入数据库后,您仍然可以调用notifyDataSetChanged(),然后再次打开该片段
// Need to immediately update the listview one the values have been inserted into the database
((BaseAdapter)display_contacts1.getAdapter()).notifyDataSetChanged();
// Reopen the fragment
getFragmentManager().beginTransaction().replace(R.id.frame_layout, SelectModemFragment.newInstance()).commit();