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 )以及该对象的状态如何与 viewpager 中的“populate()”和“notify()”调用相关联。非常重要的是,在删除时,您需要考虑以下事项:

适配器中数据数组的状态(硬删除或位置删除设置为 null )

在适配器上调用“notifyDataChanged()”,该适配器委托给 VP 上的多个调用

在对 VP 的委托调用中,在 'dataSetChanged()' 中,mAdapter.getItemPosition(ii.object) 必须返回 PagerAdapter.POSITION_NONE 以进行删除

注意:ViewPager 示例代码中使用的一些适配器在调用“getItemPostion()”时返回默认值,并且默认行为不适用于删除。

于 2013-08-11T15:06:48.930 回答