3

ViewPager を使用して、ユーザーにたくさんのフラッシュ カードを表示するアプリを開発しています。私の問題は次のとおりです。カーソルを処理し、データベースから大量のデータを取得してビューに入れるために作成したカスタム PagerAdapter があります。カードを削除するオプションを追加したいのですが、その方法がわかりません。これが私のPagerAdapterコードです。ここからどこへ行くべきかよくわかりません。

public class CardCursorPagerAdapter extends PagerAdapter {
    private Cursor cursor;
    private LayoutInflater inflater;

    public CardCursorPagerAdapter(Context context, Cursor cursor){
        this.cursor = cursor;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void swapCursor(Cursor cursor){
        this.cursor = cursor;
    }

    @Override
    public void destroyItem(View view, int position, Object object) {
        ((ViewPager) view).removeView((LinearLayout) object);
    }

    @Override
    public int getCount() {
        if (cursor == null) {
            return 0;
        } else {
            return 1000;
        }
    }

    @Override
    public Object instantiateItem(View view, int position) {
        LinearLayout layout;
        int position2 = position;
        if (position == 0){
            layout = (LinearLayout) inflater.inflate(R.layout.activity_slide_info, null);
        } else {
            position2++;
            position2 = position2 % cursor.getCount();

            cursor.moveToPosition(position2);

            layout = (LinearLayout) inflater.inflate(R.layout.activity_card, null);

            TextView cardTitle = (TextView) layout.findViewById(R.id.card_title);
            TextView cardExample = (TextView) layout.findViewById(R.id.card_example);
            TextView cardDefinition = (TextView) layout.findViewById(R.id.card_definition);

            cardTitle.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_TITLE)));
            cardExample.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_SENTENCE)));
            cardDefinition.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_DEFINITION)));
        }
        ((ViewPager) view).addView(layout);
        return layout;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }
}
4

1 に答える 1

3

ViewPager の削除については、ViewPager と実装するアダプターとの相互作用を理解することが非常に役立ちます。特に、アダプター (通常は Array ) でのデータ参照と、そのオブジェクトの状態がビューページャーでの「populate()」および「notify()」の呼び出しにどのように関連するかを理解する必要があります。非常に重要なのは、削除時に次のことを考慮する必要があることです。

アダプター内のデータ配列の状態 (ハード削除または null に設定されている位置削除)

VP で多数の呼び出しを委任するアダプターで「notifyDataChanged()」を呼び出します

VP の委任された呼び出しの途中で、「dataSetChanged()」で、mAdapter.getItemPosition(ii.object) は削除に対して PagerAdapter.POSITION_NONE を返す必要があります

ソースを見る

注: ViewPager サンプル コードで使用されている一部のアダプターは、'getItemPostion()' への呼び出しでデフォルト値を返し、デフォルトの動作は削除では機能しません。

于 2013-08-11T15:06:48.930 に答える