1

そのため、カーソルを介して動的に更新されるリストビューを含むアクティビティが 1 つあります。カーソル オブジェクトは、クエリ コマンドをこの変数に再割り当てするだけで再利用され、まったく新しいデータ セットが返されます。これはうまくいきます。問題は、SimpleCursorAdapter を AlphaIndexer で動作するように拡張したことです。どうやらカーソルが更新または変更されると、インデックス付きキャッシュがクリアされるはずです。これは起こっていません。このすべての主な理由は、渡されたさまざまなカーソルで高速スクロールを機能させ、それを機能させることです。現在、異なるカーソルを使用して、リストビューは最初のリストビューのインデックスを使用し、2 番目のリストビューを高速スクロールしようとしています。

class AlphaCursor extends SimpleCursorAdapter implements SectionIndexer {

    AlphabetIndexer alphaIndexer;
    private int list_type;
    public AlphaCursor(Context context, int layout, Cursor c, String[] from, int[] to, int type, String sortBy) {
        super(context, layout, c, from, to);
        // MUST have space in front of alphabet
        int count = c.getCount();
        // this.onContentChanged();doesnt do a thing
        alphaIndexer = new AlphabetIndexer(c, c.getColumnIndex(sortBy), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        list_type = type;

何が起こっているのか、またはこのキャッシュをクリアする方法はありますか? onChanged() と onContentChanged() を試しました。誰かがこれを見たことがありますか、または何か提案を知っていますか?

コードは次のように使用されています。

    alpha = new AlphaCursor(ClassActivity.this, R.layout.list_item, m_cursor, from, to, TAB_HOME, "name");
    alpha.changeCursor(m_cursor);
mList.setAdapter(alpha);

カーソルを再クエリして新しい AlphaIndexer を作成するだけの 4 つの「タブ」があることに注意してください。タブがクリックされるたびに、アルファ変数が無効になります。インデクサーでビューキャッシュが行われているようです。

ありがとう

4

3 に答える 3

1

AlphaIndexer は、最初に使用されたときに ScrollView に関連付けられるように見えるため、Adapter に新しい変更が設定されると、その後の変更はすべて無視されます。

質問に記載されている問題を回避するために、AlphaIndexer を ListFragment のメンバーにして、一度作成しました。アダプターで使用されるカーソルへのその後の変更では、alphaIndexer.setCursor(aCursor) を呼び出しました。これにより、「古い」インデックスの問題と、setFastScrollEnabled() を false/true で使用しようとしたときの「オフセット」アルファベットの問題が修正されました。

これは ListActivity でも機能すると思います。

于 2012-03-11T12:14:36.403 に答える
0

電話してみるalphaIndexer.setCursor(cursor);

この後

alphaIndexer = new AlphabetIndexer(c, c.getColumnIndex(sortBy), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");

メソッド setCursor は、新しいカーソルをデータ セットとして設定し、インデックスのキャッシュをリセットします。

于 2011-07-15T13:34:15.040 に答える
0

ListView の下からアダプターを変更する必要はありません。changeCursor() の代わりに swapCursor() を呼び出すとどうなるかを確認してください。

于 2011-09-07T05:05:15.053 に答える