Jacky Chan
Jacky Chan

Reputation: 53

Set CirclePageIndicator on Viewpager in android

I have 4 page on view pager. I want only show 3 CirclePageIndicator at page 1, page 2, page 3. Page 4 not show CirclePageIndicator.

 mString1 = new int[]{R.string.text_guide_1, R.string.text_guide_2, R.string.text_guide_3, R.string.text_guide_10};
    mString2 = new int[]{R.string.text_guide_4, R.string.text_guide_5, R.string.text_guide_6, R.string.text_guide_11};
    mString3 = new int[]{R.string.text_guide_7, R.string.text_guide_8, R.string.text_guide_9, R.string.text_guide_12};
    GuideAdapter adapter = new GuideAdapter(this, getContext(), mString1, mString2, mString3, this);
    mPager.setAdapter(adapter);
    mPager.addOnPageChangeListener(onPageChangeListener);
    mCirclePageIndicator.setRadius(18);
    mCirclePageIndicator.setPageColor(getContext().getResources().getColor(android.R.color.white));
    mCirclePageIndicator.setFillColor(getContext().getResources().getColor(android.R.color.black));
    mCirclePageIndicator.setVisibility(View.VISIBLE);
    mCirclePageIndicator.setViewPager(mPager);

My code. It show all CirclePageIndicator on Viewpager. Please. Help me!

File Adapter

public class GuideAdapter extends PagerAdapter {

private LayoutInflater mInflater;
private int[] mListString1;
private int[] mListString2;
private int[] mListString3;
private Context mContext;
private CustomDialog customDialog;

public GuideAdapter(CustomDialog customDialog, Context mContext, int[] mString1, int[] mString2, int[] mString3,PageClickListener callback) {
    this.customDialog = customDialog;
    this.mListString1 = mString1;
    this.mListString2 = mString2;
    this.mListString3 = mString3;
    this.mContext = mContext;
    mCallback = callback;

}

public interface PageClickListener {
    void onPageClick(int id);
}

private PageClickListener mCallback;


@Override
public int getCount() {
    return mListString1.length;
}


@Override
public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);
}

@Override
public Object instantiateItem(ViewGroup container, final int position) {
    mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View imageLayout = mInflater.inflate(R.layout.item_guide, container, false);
    assert imageLayout != null;
    TextView text_1 = (TextView) imageLayout.findViewById(R.id.text_1);
    TextView text_2 = (TextView) imageLayout.findViewById(R.id.text_2);
    TextView text_3 = (TextView) imageLayout.findViewById(R.id.text_3);
    text_1.setText(mListString1[position]);
    text_2.setText(mListString2[position]);
    text_3.setText(mListString3[position]);
    text_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCallback.onPageClick(position);
        }
    });
    text_2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCallback.onPageClick(position);
        }
    });
    text_3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCallback.onPageClick(position);
        }
    });

    container.addView(imageLayout, 0);
    return imageLayout;
}

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

Please. Help me!

Upvotes: 1

Views: 556

Answers (2)

Amir
Amir

Reputation: 16587

override setOnPageChangeListener and in your last page hide your circleIndicator.

mPager.setOnPageChangeListener(new OnPageChangeListener() {


@Override
public void onPageScrolled(int position, float arg1, int arg2) {

        if(position > 2) {
             //hide indicator

        } else if(position < 2) {
             //visible indicator
        }

    .
    .
    .

Upvotes: 1

user2503849
user2503849

Reputation: 120

Instead of adding onPageListener. Just make your class implements ONpagechangelistener and then take one field for updating the currenpage position and then on each update check if updated position is equal to array length or not if it is just ignore the circularpageindicator.

Upvotes: 0

Related Questions