Как загрузить Listview “гладко” в андроиде

Существует несколько деталей интереса при получении свойств системы/среды.

Первый, System.getenv(String) был представлен way-back-when, затем удержал от использования. Депрекация (по-дурацки, IHMO) продолжалась полностью в JSE 1.4.

Это стало повторно введенным в JSE 5.

Они установлены с помощью панели Environment Variables в Windows. Изменения в переменных не могут быть взяты, пока Ваш текущий VM не является завершением работы, и из экземпляра CMD.exe выходят.

В отличие от свойств среды, Java также имеет системные свойства Java, доступные до System.getProperties() . Эти переменные могут быть инициализированы, когда VM запускается с помощью серии -Dname=value параметры командной строки. Например, значения для свойств maxInMemory и pagingDirectory установлены в команде ниже:

C:\> java.exe -DmaxInMemory=100M -DpagingDirectory=c:\temp -jar myApp.jar

Эти свойства могут быть изменены во времени выполнения, запретив ограничения политики безопасности.

11
задан Dennie 25 August 2009 в 03:09
поделиться

2 ответа

Я опишу вам, как получить такую ​​проблему, которая у вас есть. Возможно, это вам поможет.

Итак, в адаптере списка у вас есть такой код:

public View getView(int position, View contentView, ViewGroup arg2)
    {
        ViewHolder holder;

        if (contentView == null) {
            holder = new ViewHolder();
            contentView = inflater.inflate(R.layout.my_magic_list,null);
            holder.label = (TextView) contentView.findViewById(R.id.label);
            contentView.setTag(holder);
        } else {
            holder = (ViewHolder) contentView.getTag();
        }

        holder.label.setText(getLabel());

        return contentView;
    }

Как видите, мы устанавливаем значение элемента списка только после того, как получили владельца.

Но если вы переместите код в приведенный выше оператор if:

holder.label.setText(getLabel());

, он будет выглядеть, как показано ниже:

if (contentView == null) {
   holder = new ViewHolder();
   contentView = inflater.inflate(R.layout.my_magic_list,null);
   holder.label = (TextView) contentView.findViewById(R.id.label);
   holder.label.setText(getLabel());
   contentView.setTag(holder);
}

у вас будет текущее поведение приложения с дублированием элементов списка.

Возможно, это поможет.

11
ответ дан 3 December 2019 в 05:35
поделиться

ListView - хитрый зверь.

Сначала ваш второй вопрос: вы видите дубликаты, потому что ListView повторно использует представления через convertView, но вы не обязательно сбрасываете все аспекты преобразованный вид. Убедитесь, что путь кода для convertView! = Null правильно устанавливает все данные для представления, и все должно работать правильно.

Вам понадобится getView () , чтобы он выглядел примерно так, если вы используете настраиваемые представления:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final MyCustomView v = convertView!=null ? (MyCustomView)convertView : new MyCustomView();
    v.setMyData( listAdapter.get(position) );
    return v;
}

Если вы не используете собственное представление, просто замените вызов new MyCustomView () вызовом ] inflater.inflate (R.layout.my_layout, null)

Что касается вашего первого вопроса, вы захотите посмотреть технический разговор Ромена о производительности ListView здесь: http://code.google. com / events / io / sessions / TurboChargeUiAndroidFast.html

Из его выступления и в порядке важности из моего собственного опыта

  • Используйте convertView
  • Если у вас есть изображения, не масштабируйте изображения на лету. Используйте Bitmap.createScaledBitmap, чтобы создать масштабированное растровое изображение и поместить его в ваши представления
  • Используйте ViewHolder, чтобы вам не приходилось каждый раз вызывать кучу findViewByIds ()
  • Уменьшите сложность представлений в вашем списке. Чем меньше подвидов, тем лучше. RelativeLayout намного лучше, чем, скажем, LinearLayout. И обязательно используйте, если вы реализуете собственные представления.
8
ответ дан 3 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: