Я прошу об этом, потому что все работает хорошо, но я не понимаю, почему это реализовано таким образом.Как это работает, используя аргумент convertView, предоставляемый getView от ArrayAdapter?
Я прочитал, как использовать convertView здесь:
What is the purpose of `convertView` in ListView adapter?
Но потом я прочитал этот код: (ссылка: https://github.com/paraches/ListViewCellDeleteAnimation)
ViewHolder
- тег для просмотра информации об в объект
deleteCell
функция, мы установите needInflate
boolean (ViewHolder
) в true, поэтому мы предоставляем информацию, которую этот взгляд можно использовать повторно. Когда мы создаем новый параметр мы view
тега в ложь ...
Почему во втором if
заявления, скажем needInflate
, чтобы быть правдой (что view
открыт для повторного использования), в фигурных скобках, мы находимся в новом view
? Не должно было быть наоборот, второе - третье (view = convertView;
) и наоборот? getView
функция:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
...
if (convertView==null) {
view = mInflater.inflate(R.layout.chain_cell, parent, false);
setViewHolder(view);
}
else if (((ViewHolder)convertView.getTag()).needInflate) {
view = mInflater.inflate(R.layout.chain_cell, parent, false);
setViewHolder(view);
}
else {
view = convertView;
}
vh = (ViewHolder) view.getTag();
vh.text.setText(cell.name);
vh.imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
deleteCell(view, position);
}
});
return view;
}
EDIT Когда я делаю то, что я объясню выше изменения второго и третьего утверждения, то создает некоторое дополнение или несколько запас, я не знаю ...
Я мужчина, вы все в порядке, хорошая почта и объяснение. Я прочитал это в ссылке, о которой идет речь ... Но мой вопрос был так, как будто вы сказали, что нам нужно повторно использовать аргумент «convertView», поэтому почему во втором случае if мы раздуваем новый вид? – Jeste
Ahh. Хорошая точка @ Жест. Это потому, что во-первых, нет повторного использования. т.е.: при загрузке списка сначала нет никаких видов, которые можно повторно использовать. Поэтому вы должны инициировать его в первый раз. Поэтому при первой загрузке listView вы увидите, что convertView равен NULL. С этого момента (теоретически) вы должны уметь видеть, что convertView не будет NULL. Однако мы не можем предсказать, что он НЕ будет NULL * always * впоследствии. Это зависит от того, как ведет себя ОС Android. Почему бы вам просто не поставить журнал, чтобы посмотреть, как ведет себя параметр conversionView! –
Можете ли вы посоветовать мне, что положить в журнал? BTW есть только один класс - активность не большая в проекте, если у вас есть время, попробуйте ... – Jeste