Chris Banes PullToRefreshListView с ошибкой пользовательского адаптера

Я настраиваю Custom ListView.

Функция pull-to-refresh выполняется прямо из https://github.com/chrisbanes/Android-PullToRefresh

ListView отображает изображения, поэтому я создал специальный адаптер:

class mAdapter extends BaseAdapter{ public mAdapter(Context context){ // nothing to do } @Override public int getCount() { return mValues.size(); } @Override public Object getItem(int position) { return mValues.get(position); } @Override public long getItemId(int position) { return position; } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if(v == null){ LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(R.layout.list_item, null); } ImageView iv = (ImageView) v.findViewById(R.id.imageView); if(iv != null){ displayImageInView(iv); iv.setClickable(true); iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "ImageView", Toast.LENGTH_SHORT).show(); } }); } return v; } } 

В onCreate (), я получаю listView и назначаю адаптер:

 mListView = (PullToRefreshListView) findViewById(R.id.listView); mListView.setAdapter(new mAdapter(context)); 

После этого я добавляю изображение в mValues ​​(URL для загрузки изображения из Интернета) и вызываю notitiyDataSetChanged на адаптере.

В mListView.onRefresh (), я добавляю изображение в mValues.

Это работает плавно для добавления первого изображения или даже первой группы изображений (до вызова mAdapter.notifyDataSetChanged ()). Индикатор обновления отображается и скрывается по назначению.

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

Индикатор обновления показывает, изображение отображается в виде списка.

НО: индикатор обновления никогда не скрывается после этого. «OnRefreshComplete ()» вызывается, но, похоже, не работает должным образом во второй раз.

Резьба пользовательского интерфейса не блокируется, поэтому операция по-прежнему возможна. Если я удалю все элементы в mValues, сообщите об этом адаптеру и снова загрузите, изображение будет добавлено правильно, а индикатор обновления будет скрыт должным образом.

Вывод: исправление для обновления только хорошо скрывается, если список был пуст перед обновлением.

Я действительно не знаю, где искать решение этой странной ошибки.

Может быть, кто-то, кто знаком с библиотекой Pull-To-Refresh от Chirs Banes, может помочь мне здесь.

Спасибо !

Я просто понял это сам.

Для всех, кто интересуется:

Вы должны установить onRefreshComplete из потока пользовательского интерфейса. Используйте Handler для .post изнутри onRefresh (). <- который, кстати, работает на отдельном потоке.

Хорошего дня.

Я нашел два способа:

  1. Динамически, когда вам нужно pulltorefreshview, чтобы остановить выполнение задачи, вы можете настроить пользовательскую AsyncTask, например:

     private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected String[] doInBackground(Void... params) { return null; } @Override protected void onPostExecute(String[] result) { lv.onRefreshComplete(); showToast(getResources().getString(R.string.no_more)); super.onPostExecute(result); } } 
  2. Динамически вызывать setMode для pulltorefreshView

     ptrlv.setMode(Mode.Both); // both direction can be used ptrlv.setMpde(Mode.PULL_FROM_START); // only pull down can be used.