2015-03-04 4 views
0

, пожалуйста, помогите мне в этой проблеме, я попытался исправить его в течение 3 дней, но ничего не получилось.Дисплей клавиатуры Android влияет на макет

У меня есть SearchView, Fragment, ArrayAdapter, который отображает элементы списка, все работает нормально, но есть одна проблема, всякий раз, когда клавиатура отображается/скрывается, когда я нажимаю на SearchView, вызывается метод getView в MyArrayAdapter и все элементы в списке перезагружаются, что я не хочу, потому что у каждого элемента есть ImageView, изображение загружается с url с помощью AsyncTask. Я не знаю, нормальное поведение или нет, пожалуйста, помогите мне.

В Фрагменте создайте ArrayAdapter

 final SubjectArrayAdapter adapter = new SubjectArrayAdapter(getActivity(), list); 
     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(getActivity(), "SUBJECT ID: " + view.getId(), Toast.LENGTH_LONG).show(); 
      } 
     }); 

В ArrayAdapter

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = null; 
    try { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     rowView = inflater.inflate(R.layout.row_layout, parent, false); 
     TextView firstTextView = (TextView) rowView.findViewById(R.id.firstLine); 
     TextView secondTextView = (TextView) rowView.findViewById(R.id.secondLine); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); 
     firstTextView.setText(list.get(position).getSubjectName()); 
     secondTextView.setText(list.get(position).getDescription()); 
     Toast.makeText(context, "" + list.get(position).getSubjectId(), Toast.LENGTH_SHORT).show(); 
     new DownloadImageTask(imageView).execute(list.get(position).getIconUrl()); 
     rowView.setId(list.get(position).getSubjectId()); 
    } catch (Exception e) { 
     Log.e("SubjectArrayAdapter!getView", e.toString()); 
    } 
    return rowView; 
} 

SearchView нормально SearchView, ничего конкретного, я изменил его на EditText и проблема все еще происходит, я использовал эмулятор без дисплея клавиатуры, и ничего не происходит, поэтому моя единственная догадка заключается в том, что проблема заключается в отображении/скрытии клавиатуры.

Благодаря

EDIT

Спасибо за поддержку всем, я нашел Пикассо LIB, хотела, чтобы я знал об этом раньше, я просто изменить 1 строку кода

new DownloadImageTask(imageView).execute(list.get(position).getIconUrl());

с этим

Picasso.with(context).load(list.get(position).getIconUrl()).fit().into(imageView);

+0

Его нормальное поведение адаптера, потому что всякий раз, когда представление вида списка становится невидимым или возвращается к видимости, адаптер снова генерирует представление и вызывает метод getVIew. вы не можете остановить это. –

+0

Уверены ли вы, я попробовал с игровым магазином, но их образ не перезагрузился, как я делаю, когда я нажимаю «Поиск в Google Play» или скрываю его, не использовал ли он адаптер, как я, или неправильно использую изображение загрузки, потому что мой маг явно перезаряжается. Спасибо –

+0

Там изображение не перезагружается, потому что они кэшируют изображение после загрузки и использования из него в следующий раз – Fahim

ответ

0

Скрытие и отображение ввода клавиатуры приводит к тому, что ваше представление запускает другой макет (поскольку размер окна изменился), который вызывает ListView, чтобы попросить адаптер снова привязать данные к просмотрам.

Это нехорошая практика, чтобы начать долгое выполнение задачи загрузки в обратном вызове адаптера. Существует несколько способов поведения пользователей, которые заставляют вашу инфраструктуру запрашивать эти просмотры несколько раз, и ваше приложение будет продолжать вращаться вокруг своих колес. Если пользователь поворачивает устройство или даже быстро прокручивает список, у вас будет такая же проблема.

Обратите внимание на раздел руководства разработчика, в котором обсуждаются способы загрузки, обработки и кэширования для правильной обработки растровых изображений.

Смежные вопросы