更新ListView中的项目

时间:2014-11-28 19:11:20

标签: android android-listview android-adapter

我有一个包含项目列表的列表视图。有一个事件发送listview的给定行的新值。例如:我有一个名单的列表视图(“Jhon”,“Alice”,“Paul”,“Mary”,“Stive”)然后事件我“警告”Jhon的名字改为“Josh”。如何访问包含名称“Jhon”的在线列表视图,我使用适配器和视图来填充列表视图。

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

}

}

1 个答案:

答案 0 :(得分:0)

只需拨打适配器上的notifyDataSetChanged即可。这将通知它ListView中的数据已更改。

此处有更多信息:http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()