findViewById
- это очень дорогой вызов, которого следует избегать, насколько это возможно, к счастью, есть идея ViewHolder
, которую вы можете использовать следующим образом:
создать внутренний класс с именем ViewHolder
private class ViewHolder {
TextView link;
}
затем внутри вашего getView,
ViewHolder viewHolder;
if(convertView==null) {
convertView = inflater.inflate...
viewHolder = new ViewHolder();
viewHolder.link = convertView.findViewById...
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)convertView.getTag();
}
После этого нужно просто использовать элементы-держатели вместо переменной TextView link
.
так
viewHolder.link.setOnClickListener...
Кроме того, вместо создания сотен различных действий, вы можете кодировать более гибкое действие, которое может настраиваться в зависимости от информации, получаемой от намерения, которое его запускает. Пример:
внутри onClickListener,
Intent i = new Intent(context, MyFlexibleActivity.class);
i.putExtra("position", position);
startActivity(i);
Чтобы получить позицию в получающей деятельности, выполните
int position = getIntent().getIntExtra("position", default_value);
и работайте с этой информацией, чтобы показать, что вы пытаетесь выполнить с помощью различных действий.
Если у вас есть еще вопросы, не стесняйтесь спрашивать в комментариях.
(обновление: пример массива строк, с этой страницы )
в вашем strings.xml вместо одной строки на элемент вы можете иметь массив строк:
Меркурий
Венера
земной шар
Марс
чтобы использовать его,
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);