Переопределение Adapter.getView

Я новичок в программировании на Android и делаю первые шаги с помощью Adapters (для ListView ).

Переопределяя Adapter.getView я часто вижу такие вещи:

 public View getView(int position, View convertView, ViewGroup parent) { View itemView = null; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) parent.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); itemView = inflater.inflate(R.layout.table_row, null); } else { itemView = convertView; } // play with itemView return itemView; } 

Мой вопрос в том, что говорит против этого:

 public View getView(int position, View convertView, ViewGroup parent) { View itemView = super(position, convertView, parent); // play with itemView return itemView; } 

Кажется, это работает для меня, но я уверен, что есть большая точка, которую мне не хватает: D

Спасибо за чтение и извините за мой плохой английский …

Solutions Collecting From Web of "Переопределение Adapter.getView"

Вы можете использовать

 View itemView = super(position, convertView, parent); 

Если вы используете только «готовые к использованию» адаптеры (а не BaseAdapter ), такие как SimpleAdapter или ArrayAdapter , поскольку они уже имеют свою реализацию для getView() .

Посмотрите на них: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 для ArrayAdapter и http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113 для SimpleAdapter.

Если вы BaseAdapter из BaseAdapter , вам придется вручную реализовать весь метод, как вы описали в первом примере, потому что он не имеет его из коробки: http://grepcode.com/file/repository.grepcode .com / Java / внутр / com.google.android / Android / 4.0.4_r2.1 / Android / виджет / BaseAdapter.java # BaseAdapter

Метод getView(..) для адаптера может быть несколькими способами. Вопрос только в том, какой из них наиболее эффективен?

Интересная статья для чтения и ознакомления с ListView более подробно: http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

Если вы имеете в виду, что этот фрагмент кода:

 if (convertView == null) { LayoutInflater inflater = (LayoutInflater) parent.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); itemView = inflater.inflate(R.layout.table_row, null); } else { itemView = convertView; } 

Кажется вам ненужным: этот фрагмент кода позволяет Android создавать относительно небольшое количество ячеек (равно числу ячеек, которые видны на вашем экране + -), а затем «перерабатывать» эти ячейки – использовать их снова и снова В то время как пользователь прокручивает список, а не создает ячейку для каждого объекта в вашем массиве. Это поможет вам:

  1. Сохранение памяти – потому что вы не создаете представление для каждого элемента в вашем массиве

  2. Сохранение использования ЦП – создание объекта представления из xml-файла («раздувание») – относительно дорогостоящая задача, и поэтому для каждого элемента в вашем массиве может подавить поток пользовательского интерфейса