gpt4 book ai didi

android - ViewPager PagerAdapter 删除项目

转载 作者:太空狗 更新时间:2023-10-29 12:46:02 26 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序使用 ViewPager 向用户显示一大堆闪存卡。我的问题如下 - 我有一个自定义的 PagerAdapter 来处理游标并从我的数据库中获取一大堆数据并将其放入 View 中。我想添加一个选项来删除卡片,但我不确定该怎么做。这是我的 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 删除,理解 ViewPager 与您实现的适配器的交互确实很有帮助。特别是,您应该了解适配器中的数据引用(通常是 Array )以及该对象的状态如何与 viewpager 中的“populate()”和“notify()”调用相关。非常重要的是,在删除时,您需要考虑以下因素:

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

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

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

参见 source

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

关于android - ViewPager PagerAdapter 删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com