#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 () будет тем местом, где вы будете обрабатывать определенный размер (высоту) для любого заданного представления.