简体   繁体   中英

Can't swiping between fragments in viewpager with buttons

I would change fragment in the viewpager using a button in every fragment. So in the fragment in position 0 i have a button and onClick i'll change in second fragment (position 1) and so on. Actually i'm using this code in the fragment at position 0:

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.open_welcome_fragment_layout, container,
                             false);
            final WelcomeViewPager pagerV = new WelcomeViewPager();
            Button nextBtnOpen = (Button)view.findViewById(R.id.button_next_open);

            nextBtnOpen.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        ((WelcomeViewPager)getActivity()).setCurrentItem(1, true);
                    }
                });
            return view;    
    }

position 1:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
            final View view = inflater.inflate(R.layout.firstwelcomefrg, container, false);
            final WelcomeViewPager pagerV = new WelcomeViewPager();
            Button nextBtn = (Button)view.findViewById(R.id.button_next_one);

             nextBtn.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        ((WelcomeViewPager)getActivity()).setCurrentItem(2, true);
                    }
                });
            return view;
    }

position 2:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.secondwelcomefrg, container,
                             false);
            final WelcomeViewPager pagerV = new WelcomeViewPager();
            Button nextBtnTwo = (Button)view.findViewById(R.id.button_next_two);

            nextBtnTwo.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        ((WelcomeViewPager)getActivity()).setCurrentItem(3, true);
                    }
                });
            return view;    
    }

and in my ViewPager Activity i created this method:

public void setCurrentItem (int item, boolean smoothScroll) {
        mViewPager.setCurrentItem(item, smoothScroll);
    }

unfortunatelly not works. I can change from first to second fragment but every fragment returns to second.. Seems that the only one position accepted is the first one. In this case:

((WelcomeViewPager)getActivity()).setCurrentItem(1, true);

why this behaviour?

I think what you are trying to do is to have tabs and each tab to help switch between views. You should use actionBar tabs for this, not buttons.

This should help . It is a pretty detailed tutorial.

Do you want Button ? I use for similary problem solving with listener. Example of code below. Maybe help.

PagerActivity.java

import com.example.zzztest2.MyPagerAdapter.OnPagerItemSelected;

public class PagerActivity extends Activity implements OnPagerItemSelected  {

ViewPager viewPager;
ArrayList<Bitmap> bitmapArray=null;
ArrayList<String> textArray=null;
ArrayList<String> urlArray=null;  
int pagexi;   

  @Override
  public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reklamapager);

        viewPager = (ViewPager) findViewById(R.id.view_pager);

         //setting adapter
         new readAsync().execute();

  }//end oncreate

  //switch page
  public void pagerItemSelected(int newposition) {

        viewPager.setCurrentItem(newposition);
  }

Setting my adapter in onpostexecute Async

protected void onPostExecute(String file_url) {

            MyPagerAdapter adapter = new MyPagerAdapter(PagerActivity.this, textArray, urlArray, bitmapArray, PagerActivity.this );
            viewPager.setAdapter(adapter);
            //start position
            int pagexi = 2;
            viewPager.setCurrentItem(pagexi);

        }

MyPagerAdapte.java

public class MyPagerAdapter extends PagerAdapter {


    Context context;
    OnPagerItemSelected mListener;
    ArrayList<String> textArray;
    ArrayList<String> urlArray;
    ArrayList<Bitmap> bitmapArray;
    ImageView imageView;
    TextView textreklama1;
    Button btnSwitchPage;
    public Activity activity;
    String firmax;
    String adresarx;


    MyPagerAdapter(Context context, ArrayList<String> textArray, ArrayList<String> urlArray, ArrayList<Bitmap> bitmapArray, OnPagerItemSelected listener){
        this.context=context;
        this.textArray=textArray;
        this.urlArray=urlArray;
        this.bitmapArray=bitmapArray;

        this.mListener = listener;
    }

    @Override
    public int getCount() {

        return textArray.size();
    }

    public Object instantiateItem(ViewGroup collection, int position) {
         LayoutInflater inflater = (LayoutInflater) collection.getContext()
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


         View view = inflater.inflate(R.layout.reklamator_new, null);


            String indexx = textArray.get(position).toString();
            String delims2 = "[;]+";
            String[] riadokxxx = indexx.split(delims2);
            String ucex =  riadokxxx[0].trim();
            String dokx =  riadokxxx[1].trim();



            EditText inputUce = (EditText) view.findViewById(R.id.inputUce);
            inputUce.setText(ucex);                 
            EditText inputDok = (EditText) view.findViewById(R.id.inputDok);
            inputDok.setText(dokx);                 

            btnSwitchPage = (Button) view.findViewById(R.id.btnSwitchPage);
            btnSwitchPage.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    //here set new position
                    int xxx=1;
                    mListener.pagerItemSelected(xxx);

                }


            });


         ((ViewGroup) collection).addView(view, 0);
         return view;
         }

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

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

         //new position
         public interface OnPagerItemSelected {
             void pagerItemSelected(int xxx);
         }


}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM