ViewPager PagerAdapter 删除条目

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;
    }
}

你解决了如何从viewpager中删除视图的问题吗? - Kala J
逐步说明如何从适配器中删除数据,以及如何让ViewPager知道数据已更改并应将其删除。 - katwekibs
1个回答

3
对于ViewPager的删除操作,理解ViewPager与实现的适配器之间的交互非常有帮助。特别是,您应该了解适配器中数据引用(通常是数组)的状态与'populate()'和'notify()'在viewpager中的调用之间的关系。非常重要的是,在删除时,您需要考虑以下内容:
适配器中数据数组的状态(硬删除或位置删除,其中设置为null)
在适配器上调用'notifyDataChanged()',该方法委托给VP上的多个调用
在VP的委托调用中,在'dataSetChanged()'中,mAdapter.getItemPosition(ii.object)必须为删除返回PagerAdapter.POSITION_NONE
请参见source 注意:一些在ViewPager示例代码中使用的适配器在调用'getItemPostion()'时返回默认值,并且默认行为不适用于删除操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接