ListView no se actualiza hasta que el teclado está oculto

tengo unDialogFragment y en su diseño tengo unEditText y unListView. La Vista de lista básicamente muestra la lista de contactos (Inicialmente, esta lista tiene 0 elementos). Cuando eledittextEl valor se actualiza. Relleno la lista con contactos que tienentext escrito en elEditText.

Sobre elEditText He usado unaddTextChangedListener para actualizar la lista con los contactos deseados a medida que el usuario escribe un nombre o dirección de correo electrónico del contacto.

El extraño problema al que me enfrento es que la lista (o tal vez el diseño) se actualiza solo cuando presiono el botón Atrás para ocultar el teclado después de escribir. Mientras el teclado virtual muestre que la lista no se actualiza (excepto por primera vez cuando se agregan elementos a la lista vacía).

A continuación se incluye parte del código para una mejor comprensión.

CustomDialogFragment.java

(en onCreateView):

    // Set list adapter for contacts list
    contactsList = (ListView) shareView.findViewById(R.id.contactList);
    emailContactAdapter = new EmailContactAdapter(getActivity(), emailContacts, shareFragment);
    contactsList.setAdapter(emailContactAdapter);

    // Implement Phone-book contact share
    sendToInput = (EditText) shareView.findViewById(R.id.contact_name);
    sendToInput.addTextChangedListener(onContactNameSearch);

en onContactNameSearch (TextWatcher):

public TextWatcher onContactNameSearch = new TextWatcher() {

    private generics commonMethods = new generics();

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        emailContacts.clear();
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        Log.d("DEBUG::REACH", "After Text Changed called");
        String textValue = s.toString();

        // Show or hide the share apps list based on user input
        // and whether or not the list is already showing or not
        if (textValue.equals("")) {
            Log.d("DEBUG::REACH", "TEXT value is empty");
            showAppList();
            emailContacts.clear();
        } else {

            Log.d("DEBUG::REACH", "TEXT has value");

            // Hide app list if visible
            if (isAppListShowing()) hideAppList();

            // Get the email contacts list based on the user query
            emailContacts.addAll(commonMethods.getEmailContacts(appContext, textValue));
        }

        adapter.notifyDataSetChanged();
    }

Mi suposición es que la lista del adaptador de la lista se actualiza correctamente pero, por alguna razón, el diseño no refleja los nuevos cambios hasta que se oculta el teclado virtual.

Preguntas:

¿Alguien ha enfrentado un problema similar antes (No pudo encontrar ningún recurso mientras busca en Google: /)?Por qué pasó esto ?¿Hay algo relacionado con esto en los documentos oficiales?¿Cuál es la mejor manera de resolver esto?

PD: El código en elafterTextChanged método estaba previamente en elonTextChanged método y estaba enfrentando el mismo problema.

ACTUALIZAR (Capturas de pantalla agregadas para una mejor comprensión)

Lo siguiente es cuando se muestra el fragmento de diálogo y no se ha escrito ningún texto en el texto de edición.

Ahora cuando escribo "A" y la lista se completa.

Agrego algunas otras letras pero la lista no se actualiza. Agregué letras "mit", así que ahora la consulta se convierte en "Amit" pero no hay cambios en la lista.

Ahora cuando presiono el botón de retroceso de hardware en el dispositivo para ocultar el teclado. El teclado está oculto y la lista se actualiza.

(No te preocupes por la superposición de nombres de contactos y correos electrónicos, todavía tienes que arreglar el diseño: P)

ACTUALIZACIÓN2 (Agregar código de EmailContactAdapter)

La siguiente es la clase EmailContactAdapter

public class EmailContactAdapter extends BaseAdapter {

private Activity activity;
private ArrayList<EmailContact> contacts;
private ProductShareFragment fragment;
private LayoutInflater inflater;

/**
 * Constructor
 */
public EmailContactAdapter(Activity activity, ArrayList<EmailContact> contacts, ProductShareFragment fragment) {
    this.activity = activity;
    this.contacts = contacts;
    this.fragment = fragment;
}

@Override
public int getCount() {
    return contacts.size();
}

@Override
public Object getItem(int position) {
    return contacts.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (inflater == null) {
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.email_contact_list_row, null);
    }

    EmailContact contact = contacts.get(position);
    ImageView contactImage = (ImageView) convertView.findViewById(R.id.email_contact_image);
    TextView contactName = (TextView) convertView.findViewById(R.id.email_contact_name);
    TextView contactEmail = (TextView) convertView.findViewById(R.id.email_contact_email);

    // contactImage.setImageBitmap(contact.getImage());
    contactName.setText(contact.getName());
    contactEmail.setText(contact.getEmail());

    return convertView;
}
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta