2013-04-21 1 views
0

Я пытаюсь определить лучший способ иметь один Listview, содержащий разные стили строк.Android Listview с разным расположением для каждой строки, зависящей от значений строк.

Я искал alot и нашел несколько трюков, используя getViewTypeCount() и getItemViewType(int position), чтобы изменить структуру списка в зависимости от положения, и это не то, что я ищу.

Что я пытаюсь сделать, так это изменить макет списка, основанный на значении textview самой строки.

+0

Я довольно уверен TextView вы хотите отслеживать установлен где-то в вашем адаптере, не так ли? –

+0

http://www.youtube.com/watch?v=wDBM6wVEO70 – Raghunandan

ответ

0

Я не понимаю, почему вы не можете достичь этого с помощью перечисленных выше методов, если вы знаете, сколько просмотров у вас есть, а затем создайте .xml для каждого из них, а затем в getView() раздуйте соответствующий макет в зависимости от стоимость вашего textview. Затем вы возвращаете эту строку, и затем она должна работать.

0

хорошо, это именно то, что вам нужно сделать.

переопределите getViewTypeCout, чтобы вернуть количество типов, которые у вас есть.
переопределить getItemViewType и определить тип в соответствии с положением (или пункт, чтобы показать)

после этого просто использовать это в вашем getView так:

public View getView(int position, View convertView, ViewGroup parent) { 
    if(getItemViewType(position) == FIRST_VIEW_TYPE) { 
     // inflate first view 
    } else { 
     // inflate seconde view 
    } 
} 
0

Я искал много, и нашел некоторые трюки с использованием getViewTypeCount() и getItemViewType (int position), чтобы изменить структуру списка в зависимости от позиции, и это не то, что я ищу.

Да, это так.

Что я пытаюсь сделать, так это изменить раскладку listview, основываясь на значении textview самой строки.

Нет, вы не являетесь. Вы пытаетесь «изменить макет listview, на который ссылается [sic] на« некоторый текст, который вы планируете вставить »в значение textview для самой строки». Как указывает mr_archano, этот TextView не волшебным образом получает значение - он получает значение, основанное на чем-то вас, помещенном туда тем или иным способом.

Следовательно:

  • Override getViewTypeCount() вернуть число различных возможных типов строк

  • Override getItemViewType() вернуть значение от 0 до getViewTypeCount()-1 на основе текста, что вы планируете заливке в TextView

  • Убедитесь, что ваш номер getView() или bindView() реализации осведомлена о различных типах представлений и обрабатывает их соответствующим образом

0

Содержания в TextView внутри ListView Роу должен исходить из каких-то данных, которые вы определили (вероятно, ArrayList или подобного я предполагаю) , поэтому вам нужно проверить, какой вид изображения вы хотите нарисовать на основе этих данных, прежде чем рисовать ROW, это делается по методу getView().

getView() вызывается, когда ListView хочет визуализировать данный элемент, вы думаете, что он не связан с позицией, но он это делает. Вы знаете содержимое TextView перед их рисованием, поэтому проанализируйте это значение и используйте тип макета, который вы хотите в getView динамически;).

Прочитайте это, если она до сих пор не ясно: Android custom listview row

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