javaandroidandroid-viewpagernotifydatasetchangedcurrent-page

Android ViewPager Delete Current Page and move to next


In ViewPager when the user clicks on the delete button, I am trying to delete the current page and move to next page. When I try below code, It moves to next page but removes the last page. Kindly help me.

@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();
}

Solution

  • After couple of tries, I got this resolved by adding getItemPosition and setting return POSITION_NONE;
    If u dont add this notifyDataSetChanged(); method won't work.

    @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();
    }
    

    this was unnecessary after setting getItemPosition, So removed

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