4

カスタム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 に詳しい人が助けてくれるかもしれません。

ありがとう !

4

2 に答える 2

8

私はちょうどそれを自分で考え出した-.-

興味のある方へ:

UI スレッドから onRefreshComplete を設定する必要があります。Handler を使用して、onRefresh() 内から .​​post します。<-ちなみに、これは別のスレッドで実行されます。

良い1日を。

于 2013-07-08T17:09:42.803 に答える