2013-05-24 4 views
1

Я застрял на смене одной строки в заполненном ListView в течение нескольких дней и попробовал множество (java) решений, найденных здесь, также на xamarin, но, как студент, я вижу часто решения, размещенные без надлежащего документацию о том, как и почему она работает. До сих пор я создал этот пользовательский адаптер для фондового ListView:Изменить один элемент ListView

//How I initialize the Adapter and ListView 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.Main); 


      List<string> online = new List<string>(); 
      CustomAdapter lvOnlineAdapter = new CustomAdapter(this, online); 
      ListView lvOnline = FindViewById<ListView>(Resource.Id.lvOnline); 
      lvOnline.Adapter = lvOnlineAdapter; 

      lvOnlineAdapter.Add("Test1"); 
      lvOnlineAdapter.Add("Test2"); 
      lvOnlineAdapter.Add("Test3"); 

      for(int i = 0; i < lvOnlineAdapter.Count; i++) 
       lvOnlineAdapter.EditItem(i, "Test " + i + " Description") 

      lvOnlineAdapter.NotifyDataSetChanged(); 
     } 




    public class CustomAdapter : BaseAdapter<string> 
{ 
    List<string> items; 
    Activity context; 
    public CustomAdapter(Activity context, List<string> items) : base() 
    { 
     this.context = context; 
     this.items = items; 
    } 
    public void Add(string itemToAdd) 
    { 
     items.Add (itemToAdd); 
    } 
    public void Remove(string itemToRemove) 
    { 
     items.Remove (itemToRemove); 
    } 
    public void Remove(int position) 
    { 
     items.RemoveAt(position); 
    } 
    public override long GetItemId(int position) 
    { 
     return position; 
    } 
    public void EditItem(int Position, string Text2) 
    { //Here is my problem, it does not change anything 
     View view = GetView (Position, null, null); 
     view.FindViewById<TextView>(Android.Resource.Id.Text1).Typeface = Typeface.DefaultBold; 
     view.FindViewById<TextView>(Android.Resource.Id.Text1).SetBackgroundColor(Color.Yellow); 
     view.FindViewById<TextView>(Android.Resource.Id.Text2).Text = Text2; 
    } 
    public override string this[int position] 
    { 
     get { return items[position]; } 
    } 
    public override int Count 
    { 
     get { return items.Count; } 
    } 
    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; // re-use an existing view, if one is available 
     if (view == null) // otherwise create a new one 
      view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem2, null); 

     view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = items[position]; 
     return view; 
    } 
} 

Моя проблема, когда я использую EditItem это ничего не меняет, может кто-то пожалуйста, объясните, почему это не работает, и что я попал в сделать, чтобы он работал? Заранее спасибо

ответ

1
protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     SetContentView(Resource.Layout.Main); 

     lvOnlineAdapter = new CustomAdapter(this, online); 
     lvOnline = FindViewById<ListView>(Resource.Id.lvOnline); 
     lvOnline.Adapter = lvOnlineAdapter; 

     lvOnlineAdapter.Add("Test1"); 
     lvOnlineAdapter.Add("Test2"); 
     lvOnlineAdapter.Add("Test3"); 
     lvOnlineAdapter.EditItem(2, "test"); 
     for(int i = 0; i < myLayout.getChildCount(); i++) 
      if(myLayout.getChildAt(i) instanceof TextView) 
      { 
       TextView tvBold = (TextView) myLayout.getChildAt(i); 
       if(tvBold.getText().ToString() == "test") 
        tvBold.SetBackgroundColor(Color.Yellow); 
      } 
    } 

public void EditItem(int Position, string Text2) 
{ 
    items[Position] = Text2; 
    NotifyDataSetChanged(); 
} 
+0

Извините, я должен был сказать, что я инициализировал его и добавил список, отредактированный на вопрос. – user114111121

+0

может опубликовать код, в котором вы его инициализировали? – Liviu

+0

Надеюсь, я ясно дал понять, что вам спасибо, спасибо за помощь – user114111121

Смежные вопросы