2017-02-13 1 views
0

Как хранить и извлекать значения из списка в C#? Я могу хранить значения, подобные этомуКак использовать Список <Hashtable> c C#

List<Hashtable> mList=new List<Hashtable>(); 
Hashtable ht = new Hashtable(); 
ht.Add(1, "One"); 
ht.Add(2, "Two"); 
ht.Add(3, "Three"); 
ht.Add(4, "Four"); 
mList.Add(ht); 

Как установить эти значения в текстовое изображение базового адаптера в C#?

+1

Я не знаю о Xamarin textview, но очень странно ставить хэш-таблицу старого стиля в «Список <>». Вы уверены, что вам это нужно? –

+0

спасибо buddy.Yes мне нужно и сказать мне старый стиль также. Я хочу сохранить несколько значений, используя ключ – Android1

ответ

1

Как установить эти значения в текстовое изображение базового адаптера в C#?

Я предполагаю, что ваша база адаптер означает BaseAdapter для ListView, то вы можете создать адаптер наследует от BaseAdapter, например, так:

public class MainAdapter : BaseAdapter<Hashtable> 
{ 
    private List<Hashtable> items; 
    private Activity context; 

    public MainAdapter(Activity context, List<Hashtable> items) : base() 
    { 
     this.context = context; 
     this.items = items; 
    } 

    public override Hashtable this[int position] 
    { 
     get 
     { 
      return items[position]; 
     } 
    } 

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

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

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 
     if (view == null) 
      view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem1, null); 
     view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = items[position].ToString(); 
     return view; 
    } 
} 

и использовать List<HashTable> для адаптера, как это:

public class MainActivity : ListActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     //SetContentView(Resource.Layout.Main); 

     List<Hashtable> mList = new List<Hashtable>(); 
     Hashtable ht = new Hashtable(); 
     ht.Put(1, "One"); 
     ht.Put(2, "Two"); 
     ht.Put(3, "Three"); 
     ht.Put(4, "Four"); 
     mList.Add(ht); 

     ListAdapter = new MainAdapter(this, mList); 
    } 
} 

Но я сомневаюсь, что это действительно то, что вам нужно. У вас есть только один элемент в List<>, и этот элемент имеет один Hashtable, который содержит четыре значения пары ключей. Возможно ли, что вам нужно указать значение пары ключей для каждого элемента ListView вместо того, чтобы показывать четыре значения пары ключей в одном элементе?

Я согласен с @Henk Holterman, это очень странно положить Hashtable старого стиля в List<>, если вы хотите использовать List<> для хранения нескольких значений строк с ключом, вы можете просто следующий код:

List<string> mList = new List<string>(); 
mList.Add("One"); 
mList.Add("Two"); 
mList.Add("Three"); 
mList.Add("Four"); 

сам List<> выделяет индекс для каждого пункта, например, если вы хотите, чтобы найти индекс строки элемента «Три», вы можете закодировать так:

var index = mList.IndexOf("Three"); 

с первым пунктом в List<> будет соответствовать индекс 0, здесь индекс элемента «Три» будет равен 2.

Конечно, я не говорю, что нельзя хранить Hashtable в , но обычно, когда мы хотим определить ключ для каждый элемент, один метод заключается в создании модели класса, например:

public class MyListModel 
{ 
    public int Key { get; set; } 
    public string Content { get; set; } 
} 

И теперь вы можете создать List<> для этой модели:

List<MyListModel> mList = new List<MyListModel>(); 
for (int i = 1; i <= 10; i++) 
{ 
    mList.Add(new MyListModel { Key = i, Content = "item " + i }); 
} 

преимущества использования модели данных для ListView является что если вы каждый ListView элемент имеет, например, более одного TextView, каждый из которых предназначен для отображения различной информации, тогда вы можете просто добавить эти свойства в эту модель класса.

Для получения дополнительной информации о строительстве ListView в Xamarin.Android вы можете обратиться к ListViews and Adapters.

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