我有一个包含项目列表的列表视图。有一个事件发送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; }
}
}
答案 0 :(得分:0)
只需拨打适配器上的notifyDataSetChanged
即可。这将通知它ListView中的数据已更改。
此处有更多信息:http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()