Просмотр списка с элементами переменной высоты

#android #android-listview

#Android #android-listview

Вопрос:

Я должен отобразить представление списка, которое содержит элементы, увеличенные из того же шаблона макета, но имеющие переменную высоту. Я создал подкласс BaseAdapter , который возвращает эти представления в getView() методе, но по мере прокрутки ListView изменяется высота большого пальца прокрутки, а также некоторые случайные элементы становятся невыбираемыми. Как я могу это исправить?

 public class NewsfeedActivity extends ListActivity{
Vector<NewsEntry> entries=new Vector<NewsEntry>();

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newsfeed);
setListAdapter(new NewsAdapter());
}

public class NewsAdapter extends BaseAdapter{
public int getCount() {
return entries.size();
}
public Object getItem(int pos) {
    return entries.elementAt(pos);
}
public long getItemId(int position) {
    return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v=getPostView(entries.elementAt(position), NewsfeedActivity.this, convertView);
  // This method simply fills the view with data
  // height of the returned view is different, but layout is same.
return v;
}
}
  

Комментарии:

1. Можете ли вы опубликовать свой файл макета? Мои первые мысли направлены на то, чтобы установить высоту просто на «wrap_content», которая позволит всему, что находится в этом конкретном представлении (это может быть layout, TextView и т.д. и т.п.), Увеличиваться или уменьшаться по мере необходимости, чтобы содержать их данные / дочерние элементы. Но давайте посмотрим файл макета, прежде чем давать слишком много необоснованных советов.

2. Высота уже установлена в «wrap_content», и создаваемые мной представления имеют правильный размер. Моя проблема в том, что ListView ведет себя неправильно, когда элементы не имеют одинаковой высоты.

3. Попробуйте расширить представление, чтобы создать свое собственное, которое будет использоваться ListView.. Я делаю это постоянно, потому что мне нужна пользовательская графика или другая функциональность. Двумя интересными объектами будут onMeasure () и onDraw(). Основываясь на том, что вы говорите, onMeasure () будет тем местом, где вы будете обрабатывать определенный размер (высоту) для любого заданного представления.