Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write button onClick method in viewpager?

I want to Toast a message on button click using viewpager also I want more information on how to access views in viewpager.

I have tried following code.... not working

public class MyPagerAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public Object instantiateItem(final View collection, final int position) {
         v = new View(collection.getContext());
        LayoutInflater inflater =
                (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        int resId = 0;
        switch (position) {
        case 0:
            resId = R.layout.cate1;
            v = inflater.inflate(R.layout.cate1, null, false);
            add1 = (Button) v.findViewById(R.id.btnAdd);
            add1.setOnClickListener( new OnClickListener() {
                public void onClick(View m) {
                   Toast.makeText(collection.getContext(),"click",Toast.LENGTH_LONG).show();
                }
            });


            break;
        case 1:
            resId = R.layout.cate2;
            break;
        case 2:
            resId = R.layout.cate3;
            break;
        }

        View view = inflater.inflate(resId, null);
        ((ViewPager) collection).addView(view, 0);

        return view;
    }

    @Override
    public void destroyItem(final View arg0, final int arg1, final Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);

    }

    @Override
    public boolean isViewFromObject(final View arg0, final Object arg1) {
        return arg0 == ((View) arg1);

    }

    @Override
    public void finishUpdate(View arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public Parcelable saveState() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void startUpdate(View arg0) {
        // TODO Auto-generated method stub

    }

    }

I have written following code for button onclick.... not working..

      v = inflater.inflate(R.layout.cate1, null, false);
            add1 = (Button) v.findViewById(R.id.btnAdd);
            add1.setOnClickListener( new OnClickListener() {
                public void onClick(View m) {
                   Toast.makeText(collection.getContext(),"click",Toast.LENGTH_LONG).show();
                }
            });

plz HELP thank you in advance.

like image 934
Madhav Palshikar Avatar asked Oct 10 '22 02:10

Madhav Palshikar


1 Answers

Leave your code all the same but change:

    ((ViewPager) collection).addView(view, 0);

    return view;

to

    ((ViewPager) collection).addView(v, 0);

    return v;

you did the onclick right on a button that was inflated, then you inflated another view iwth resId and rendered it on the screen, that button exists in the memory of your app but no where else, by returning v, that button is drawn and the onclicklistener is invoked on click.

like image 177
Shereef Marzouk Avatar answered Oct 13 '22 12:10

Shereef Marzouk