Listview не обновляется автоматически даже при вызове notifyDataSetChanged () с базой данных Sql и курсором - PullRequest
0 голосов
/ 26 марта 2019

Я использую функцию для выбора телефонных имен из телефонной книги Android и использую курсор для получения имени и номера контакта.Я могу успешно сделать это и вставить значения в базу данных sqllite, которую я написал с помощью другого вопроса здесь, но просмотр списка не обновляется автоматически, когда в базу данных добавляется новое значение.

Я использовал все необходимые строки, включая

  • ((BaseAdapter)display_contacts1.getAdapter()).notifyDataSetChanged();

  • display_contacts1.invalidateViews();

  • arrayAdapter.notifyDataSetChanged();

  • manageListView(getContext());

Но мне все еще не удается найти решение.Единственный способ, которым обновится список, - это перейти к другому фрагменту или перезапустить приложение.

Исходный код базы данных SQL Android OnItemClick не работает с загруженной базой данных SQL в виде списка

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();
    }
}

1 Ответ

0 голосов
/ 27 марта 2019

После вставки значений в базу данных вы все равно можете вызвать 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();
...