2015-01-08 3 views
0

Я искал горизонтальный просмотр списка. Я его не нашел. Но я нашел Grid View (который отображает изображения по горизонтали) на веб-сайте Google Android. [см. bottom на этой странице для скриншота].Как программно добавлять элементы в горизонтальный список во время выполнения?

Проблема в том, что я не использую Java. Я использую C#/Monodroid/Xamarin Studio.

И я не использую изображения. Мне нужно отобразить соответствующие элементы списка (например, например, панель или div-подобная вещь, которая содержит небольшой заголовок и описание под ним для каждого элемента списка) и отображать все эти элементы списка по горизонтали в GridView.

Я понятия не имею, какой адаптер я должен использовать. Я думаю, что я должен использовать ArrayAdapter для этого, просто потому, что это единственный адаптер, который я видел, который, похоже, соответствует тому, что я хочу делать.

Кроме того, 99% обучаемых в Интернете, которые я нашел, на самом деле не объясняют, как динамически добавлять элементы в горизонтальное представление списка/сетки во время выполнения. Кажется, что все они используют статические массивы строк/xml-файлов в качестве источника данных.

Итак, мой вопрос: как создать горизонтально-прокручивающийся список (будь то GridView или что-то еще) и программно добавлять к нему элементы во время выполнения?

Если я не описывая это ясно, вот как это должно быть:

Horizontal List Item Demonstration

+0

При создании пользовательских интерфейсов с Xamarin вы не должны бояться искать ответы на java/объектив-C и самостоятельно преобразовывать код в C#. Это основные вопросы пользовательского интерфейса Android, я бы предложил вам их искать по отдельности, есть уже довольно много ответов, которые объяснят их лучше, чем я (поиск «Android горизонтальный GridView», «Адаптеры пользовательских списков Android», «Добавить элементы для адаптера во время выполнения ») – Dalmas

+0

@ Далмас спасибо за совет. Я не боюсь. Это на самом деле мое второе приложение для Android, и вчера вечером я написал плавучую кнопку Action для Android L в C#, просто посмотрев на некоторый Java-код. Однако есть некоторые вещи, которые все еще путают меня, поскольку я прихожу из фона Windows dev, и андроид кажется немного странным, так как я так новичок в этом. Я попытался написать его сам для горизонтального списка, но я просто не получаю существующие обучающие программы, поэтому я не мог перевести его на C# anyway –

+0

, я мог бы быть вне темы, но в 'Java' (Android) вы бы назвали' notifyDataSetChanged() 'в вашем объекте Adapter после изменения данных в этом адаптере. После этого «ListView» обновит его содержимое – longilong

ответ

1

Check the API для ArrayAdapter, особенно методы, как addAll или insert(Object,index)

Ваш HorizontalListView имеет один (в вашем случае) ArrayAdapter с одним источником данных. Чтобы изменить данные, которые вы

  1. Изменение источника данных в Adapter
  2. The Adapter должен уведомить ListView с notifyDataSetChanged() (вы должны вызвать notifyDataSetChanged себя! В противном случае, ListView не будет обновлять его содержание)
  3. ListView будет обновлять его содержание

Внутри вашего Adapter:

Array<YourObject> dataSource; 

//... 

//Either override existing method 
@Override 
public void add(YourObject newItem) { 
    dataSource.add(newItem); 
    notifyDataSetChanged(); 
} 

//write an own one 
public void updatedata(Array<YourObject> newItems){ 
    //add your custom logic by manipulating the dataSource array yourself 

    //for example: change everything 
    self.dataSource = newItems; 
    notifyDataSetChanged(); 
} 

И называют это в вашем ArrayAdapter

myAdapter.updatedata(Array<YourObject>) 

или получить адаптер от вашего ListView, если у вас нет ссылки с

((YourCustomArrayAdapter)yourListView.getAdapter).updatedata(Array<YourObject>) 

И только для записи, если ваш адаптер должен быть обернутым, сделать это сумасшедшее дерьмо. Это заняло у меня некоторое время.

(
    (
     YourCustomArrayAdapter (HeaderViewListAdapter)yourListView.getAdapter() 
    ).getWrappedAdapter() 
).updatedata(Array<YourObject>); 

Надеюсь, что это поможет .. Потребовалось некоторое время, пока я не понял свой код.В то время у меня было действительно причудливое хорошее настроение: D

+0

Спасибо большое lilong lol! Где вы помещаете YourObject newItem, вы имеете в виду что-то вроде вида в XML-файле, например, относительный макет с некоторыми элементами, такими как текст в нем? –

+1

YourObject - это ваш DataModel (String headline = "List Item # 1" String content = "Llorem ipsum ..."), который будет сгенерирован в вашем адаптере 'getView()' ... Может быть, этот урок может оказаться полезным: http: //www.vogella.com/tutorials/AndroidListView/article.html – longilong

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