カスタムListViewを設定しています。
プルして更新する機能は、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 (Web から読み込む画像の URL) に追加し、アダプターで notifiyDataSetChanged を呼び出します。
mListView.onRefresh() で、mValues に画像を追加します。
これは、最初の画像、または最初の一連の画像 (mAdapter.notifyDataSetChanged() を呼び出す前) を追加する場合でもスムーズに機能します。更新インジケーターは、意図したとおりに表示および非表示になります。
その後、別の画像(または束)を追加しようとすると、奇妙なことが起こり始めます。
更新インジケータが表示され、画像がリスト ビューに表示されます。
BUT : その後、更新インジケーターが再び非表示になることはありません。「onRefreshComplete()」が呼び出されますが、2 回目は正しく動作しないようです。
UI スレッドはブロックされていないため、操作は引き続き可能です。mValues 内のすべてのアイテムを削除し、アダプターに通知してプルして再度更新すると、画像が正しく追加され、更新インジケーターが適切に非表示になります。
結論: リフレッシュ前にリストが空だった場合にのみ、pull-to-refresh が適切に非表示になります。
この奇妙なエラーの解決策を探す場所が本当にわかりません。
Chirs Banes の Pull-To Refresh Library に詳しい人が助けてくれるかもしれません。
ありがとう !