Я делаю очень простое приложение (в основном список с несколькими изображениями). Как правило, он очень хорошо работает на моем тестовом устройстве (Motorola Moto G со стандартным Android, который поставляется с ним).
Однако я хочу, чтобы в моем ListView были разделители с точками. Поэтому я создал файл list_divider.xml, определяющий разделитель, и установил его как разделитель, который будет использоваться в ListView. Я попробовал это на своем Moto G, но он не отображал пунктирную линию.
Поэтому я погуглил и нашел здесь решение проблемы. Отключение аппаратного ускорения для представления решило ошибку и правильно отобразило разделитель.
Однако теперь у меня другая проблема: после отключения аппаратного ускорения приложение стало лагать при прокрутке.
Есть ли решение иметь разделитель с точками и не отключать аппаратное ускорение или, по крайней мере, иметь производительность почти такую же, как до его отключения?
Изменить: вот код адаптера, который я использую:
public class AstronautArrayAdapter extends ArrayAdapter<Astronaut> {
public static final String TAG = "AstronautArrayAdapter";
public AstronautArrayAdapter(Context context, List<Astronaut> objects) {
super(context, R.layout.astronauts_list_row, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RowViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater();
convertView = inflater.inflate(R.layout.astronauts_list_row, parent, false);
holder = new RowViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.nameOfAustronaut);
holder.daysInSpace = (TextView) convertView.findViewById(R.id.numberOfDaysInSpace);
holder.country = (ImageView) convertView.findViewById(R.id.countryImage);
holder.title = (TextView) convertView.findViewById(R.id.titleOfAstronaut);
convertView.setTag(holder);
} else {
holder = (RowViewHolder) convertView.getTag();
}
Astronaut astronaut = getItem(position);
holder.name.setText(astronaut.getName());
holder.daysInSpace.setText(Integer.toString(astronaut.getDaysInSpace()));
holder.country.setImageBitmap(astronaut.getCountryImage(getContext()));
holder.title.setText(astronaut.getTitle());
return convertView;
}
private static class RowViewHolder {
TextView name;
TextView daysInSpace;
ImageView country;
TextView title;
}
}
Редактировать 2: Вот два рассматриваемых файла макета:
Activity_main.xml
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/astronautsList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="16dp"
android:dividerHeight="3dp"
android:divider="@drawable/list_divider"
android:layerType="software" />
list_divider.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<stroke
android:width="1px"
android:color="@android:color/black"
android:dashWidth="5px"
android:dashGap="1px" />
<size android:height="3dp" />
</shape>
holder.country.setImageBitmap(astronaut.getCountryImage(getContext()));
создает впечатление, что вы, возможно, выполняете декодирование (или даже загрузку) растрового изображения в потоке пользовательского интерфейса. Ты?? - person Budius   schedule 05.07.2014