【问题标题】:Android ViewPager Delete Current Page and move to nextAndroid ViewPager 删除当前页面并移至下一个
【发布时间】:2018-01-21 19:24:30
【问题描述】:

在 ViewPager 中,当用户单击删除按钮时,我试图删除当前页面并移至下一页。 当我尝试下面的代码时,它会移动到下一页但会删除最后一页。请帮助我。

@Override
public Object instantiateItem(ViewGroup container, final int IdxVal)
{
    LinearLayout linearLayout = new LinearLayout(context);
    linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    ImageView imageView = new ImageView(context);
    imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    Glide.with(context)
            .load(imageListAryVar.get(IdxVal))
            .fitCenter()
            .into(imageView);

    linearLayout.addView(imageView);
    container.addView(linearLayout);

    return linearLayout;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
    container.removeView((LinearLayout) object);
}

void delCurrentPageFnc()
{
    int delIdxVar = viewPager.getCurrentItem();

    if(imageListAryVar.size() > 1)
    {
        if (delIdxVar == imageListAryVar.size() - 1)
            viewPager.setCurrentItem(delIdxVar - 1);
        else
            viewPager.setCurrentItem(delIdxVar + 1);

        imageListAryVar.remove(delIdxVar);
        notifyDataSetChanged();
    }
    else finish();
}

【问题讨论】:

  • 删除if (delIdxVar == imageListAryVar.size() - 1) viewPager.setCurrentItem(delIdxVar - 1); else viewPager.setCurrentItem(delIdxVar + 1);可以试试吗?
  • 如果我删除它,页面不会自动移动到下一页
  • notifyDataSetChanged();不会调用 instantiateItem();
  • 或许你可以试试viewpager.removeViewAt(int index)
  • viewpager.removeViewAt(int index) 不存在

标签: java android android-viewpager notifydatasetchanged current-page


【解决方案1】:

经过几次尝试,我通过添加 getItemPosition 和设置 return POSITION_NONE 解决了这个问题;
如果你不添加这个 notifyDataSetChanged();方法不行。

@Override
public int getItemPosition(Object object)
{
    return POSITION_NONE;
}

void delCurrentPageFnc()
{
    int delIdxVar = viewPager.getCurrentItem();

    if(imageListAryVar.size() > 1)
    {
        imageListAryVar.remove(delIdxVar);
        notifyDataSetChanged();
    }
    else finish();
}

设置 getItemPosition 后这是不必要的,所以删除了

if (delIdxVar == imageListAryVar.size() - 1) 
    viewPager.setCurrentItem(delIdxVar - 1);
else 
   viewPager.setCurrentItem(delIdxVar + 1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多