0

I have a listview with a list of items. There is an event that sends the new value for a given row of the listview. For example: I have a listview with the names ("Jhon", "Alice", "Paul", "Mary", "Stive") then the event me "warns" that the name of Jhon was changed to "Josh". How can I access the online listview containing the name "Jhon", I am using adapter and viewholder to populate the listview.

using System;
using Android.App;
using Android.Views;
using Android.Widget;
using MyApp
using Android.Content;
using System.Collections.Generic;
using Android.Graphics;

public class AdapterContatos : BaseAdapter
{
private Activity _Activity = null;

private static Usuario[] _ListaContatos;

private static Grupo[] _Listagrupos;

private static List<Object> _ListaCompleta = new List<object>();

private static LayoutInflater _Inflate = null;

private static View _View;

private static Dictionary<int, Bitmap> _DicAvatarContato = new Dictionary<int, Bitmap>();

private static Dictionary<int, Bitmap> _DicAvatarGrupo   = new Dictionary<int, Bitmap>();

public AdapterContatos(Activity activity, Usuario[] listaContatos, Grupo[] listaGrupo)
{
    _Activity = activity;

    _ListaContatos = listaContatos;

    _Listagrupos = listaGrupo;

    _ListaCompleta.AddRange(_Listagrupos);

    _ListaCompleta.AddRange(_ListaContatos);

    try
    {
        _Inflate = (LayoutInflater)_Activity.GetSystemService(Context.LayoutInflaterService);

        foreach (var item in _ListaContatos)
           ObtemImagemArredondadaContato(item.Codigo);

        foreach (var item in _Listagrupos)
            ObtemImagemArredondadaGrupo(item.CodigoDoGrupo);
    }
    catch (Exception ex)
    {
        UtilExcessao.TrateExcessao(ex);
    }
}

ViewHolderContato _HolderContato;
public override View GetView(int position, View convertView, ViewGroup parent)
{
    _View = convertView;


    try
    {
        if (_View != null)
            _HolderContato = _View.Tag as ViewHolderContato;

        else
        {
            _View = _Activity.LayoutInflater.Inflate(Resource.Layout.LayoutContato, null);

            _HolderContato = CriaViewHolder(position);
        }

        PopulaViewHolder(_HolderContato, position);

        _View.Tag = _HolderContato;

    }
    catch (Exception ex)
    {
        UtilExcessao.TrateExcessao(ex);
    }

    return _View; 
}

private ViewHolderContato CriaViewHolder(int position)
{
    ViewHolderContato holder = new ViewHolderContato();

    holder.txtNome   = _View.FindViewById<TextView>(Resource.Id.nomeContato);

    holder.txtCargo  = _View.FindViewById<TextView>(Resource.Id.funcaoContato);

    holder.imgAvatar = _View.FindViewById<ImageView>(Resource.Id.imgAvatar);

    holder.txtPrimeiraLetraNomeOuGrupo = _View.FindViewById<TextView>(Resource.Id.txtPrimeiraLetraNomeOuGrupo);

    holder.txtQntdMsgNaoLidas = _View.FindViewById<TextView>(Resource.Id.imgAlertaChat);

    return holder;
}

private void PopulaViewHolder(ViewHolderContato holder, int position)
{ 
    if(EhGrupo(_ListaCompleta[position]))
        PopulaViewHolderGrupo(holder, 
                              (Grupo)_ListaCompleta[position]);

    else
        PopulaViewHolderUsuario(holder, 
                                (Usuario)_ListaCompleta[position]);
}

void PopulaViewHolderGrupo(ViewHolderContato holder, Grupo grupo) 
{
    holder.txtNome.Text  = grupo.NomeDoGrupo;

    holder.txtCargo.Text = UtilFormatacao.ObtenhaNomeIntegrantesGrupoFormatado(grupo.ListaDeUsuarios);

    holder.txtPrimeiraLetraNomeOuGrupo.Text = UtilFormatacao.ObtenhaPrimeiraLetraDoNome(grupo.NomeDoGrupo);

    MostraAvatargrupo(holder, grupo.CodigoDoGrupo, grupo.NomeDoGrupo);
}

void PopulaViewHolderUsuario(ViewHolderContato holder, Usuario usuario)
{
    holder.txtNome.Text  = usuario.Nome;

    holder.txtCargo.Text = usuario.Cargo;

    MostraAvatarContatoPrivado(holder, usuario.Codigo, usuario.Nome);
}

void MostraAvatarContatoPrivado(ViewHolderContato holder, int codigo, string nome)
{
    if (_DicAvatarContato[codigo] != null)
    {
        holder.imgAvatar.SetImageBitmap(_DicAvatarContato[codigo]);
        holder.txtPrimeiraLetraNomeOuGrupo.Text = "";
    }

    else
    {
        holder.imgAvatar.SetImageResource(Resource.Drawable.icon_avatar_default_52);
        holder.txtPrimeiraLetraNomeOuGrupo.Text = UtilFormatacao.ObtenhaPrimeiraLetraDoNome(nome);
    }
}

void MostraAvatargrupo(ViewHolderContato holder, int codigoGrupo, string nomeGrupo)
{
    if (_DicAvatarGrupo[codigoGrupo] != null)
    {
        holder.imgAvatar.SetImageBitmap(_DicAvatarGrupo[codigoGrupo]);
        holder.txtPrimeiraLetraNomeOuGrupo.Text = "";
    }

    else
    {
        holder.imgAvatar.SetImageResource(Resource.Drawable.icon_avatar_default_52);
        holder.txtPrimeiraLetraNomeOuGrupo.Text = UtilFormatacao.ObtenhaPrimeiraLetraDoNome(nomeGrupo);
    }
}

private void ObtemImagemArredondadaContato(int codigo)
{
    using (var bmp = UtilImagem.ObtemImagemArredondado(UtilImagem.ObtemImagemLocalContato(codigo), 60, 80, 80))
    {
        _DicAvatarContato.Add(codigo, bmp);
    }
}

private void ObtemImagemArredondadaGrupo(int codigoGrupo)
{
    using (var bmp = UtilImagem.ObtemImagemArredondado(UtilImagem.ObtemImagemLocalGrupo(codigoGrupo), 60, 80, 80))
    {
        _DicAvatarGrupo.Add(codigoGrupo, bmp);
    }
}

public bool EhGrupo(Object objeto)
{
    return object.Equals(objeto.GetType(), 
                         typeof(Grupo));
}

private int ObtenhaCodigoGrupoOuUsuario(int position)
{
    if (EhGrupo(_ListaCompleta[position]))
    {
        Grupo G = (Grupo)_ListaCompleta[position];

        return G.CodigoDoGrupo;
    }

    else
    {
        Usuario U = (Usuario)_ListaCompleta[position];

        return U.Codigo;
    }
}

public void AdicionaNovoContato(Usuario usario)
{ 

}

public void RemoveContato(Usuario usuario)
{ 

}

public void AdicionaNovoGrupo(Grupo grupo)
{ 

}

public void RemoveGrupo(Grupo grupo)
{ 

}

public override int GetItemViewType(int position)
{
    return base.GetItemViewType(position);
}

public int GetCount()
{
    return _ListaCompleta.Count;
}

public override Java.Lang.Object GetItem(int position)
{
    return ObtenhaCodigoGrupoOuUsuario(position);
}

public Object ObtenhaTipoObjeto(int position)
{
    return _ListaCompleta[position];
}

public Grupo ObtenhaGrupoDaLista(int codigo)
{
    foreach (var item in _Listagrupos)
    {
        if (item.CodigoDoGrupo == codigo)
            return item;
    }

    return null;
}

public override long GetItemId(int position)
{
    return ObtenhaCodigoGrupoOuUsuario(position);
}

public override int Count
{
    get { return _ListaCompleta.Count; }
}

private class ViewHolderContato : Java.Lang.Object
{
    public TextView  txtNome                     { get; set; }
    public TextView  txtCargo                    { get; set; }
    public TextView  txtPrimeiraLetraNomeOuGrupo { get; set; }
    public ImageView imgAvatar                   { get; set; }

}

}

noNerd
  • 3
  • 4
  • simply use `notifyDataSetChanged` : http://stackoverflow.com/questions/3669325/notifydatasetchanged-example –  Nov 28 '14 at 19:16
  • @yaa110 ok, OK, but my question is how to access the line containing the name Jhon and change it to Josh, how to know which listiview position is the line of Jhon is. To add and remove is ok, just to update that I'm not getting – noNerd Nov 28 '14 at 19:19
  • which kind of Adapter do you extend? –  Nov 28 '14 at 19:20
  • please add your adapter class to the question. –  Nov 28 '14 at 19:27
  • Oops! is that C#???? why didn't you mention it in your question :/ –  Nov 29 '14 at 06:23

1 Answers1

0

Simply call notifyDataSetChanged on your Adapter. This will inform it that the data inside the ListView has changed.

More info here: http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()

Connor McFadden
  • 441
  • 1
  • 4
  • 20
  • i tried public void UpDateName(string NewName) { _View.FindViewById(Resource.Id.Name).Text = NewName; this.NotifyDataSetChanged(); } and in activity _Adapter.UpDateName(newName); but not update listview – noNerd Dec 01 '14 at 13:24