18

Uno dei miei layout all'interno del mio ViewPager ha un pulsante. "R.layout.add_site". Vorrei l'opzione di premere il pulsante e scorrere per la pagina specifica per me. Ho già la possibilità di scorrere alla pagina specifica, ma mi piacerebbe avere entrambi.Pulsante in ViewPager scorrere fino a pagina specifica

Ora sono sicuro che c'è un modo per farlo, ma per qualche ragione, non riesco a capirlo.

Vedrai che ho fatto un tentativo, ma non so quale metodo chiamare per farlo scorrere fino alla pagina desiderata. Che è R.layout.main.

Ecco il mio codice.

public class fieldsActivity extends Activity { 

Button addSiteButton; 
Button cancelButton; 
Button signInButton; 

/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // to create a custom title bar for activity window 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

    setContentView(R.layout.fields); 
    // use custom layout title bar 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar); 

    Pager adapter = new Pager(); 
    ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager); 
    mPager.setAdapter(adapter); 
    mPager.setCurrentItem(1); 


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


     @Override 
     public void onClick(View v) { 
     // Don't know what method to call!? 



     } 


    }); 


    cancelButton = (Button) findViewById(R.id.cancel_button); 
    signInButton = (Button) findViewById(R.id.sign_in_button); 

} 

private class Pager extends PagerAdapter { 
    public int getCount() { 
     return 3; 

    } 

    @Override 
    public Object instantiateItem(View collection, int position) { 
     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     int resId = 0; 
     switch (position) { 
      case 0: 
       resId = R.layout.field01; 
       break; 
      case 1: 
       resId = R.layout.add_site; 





       break; 
      case 2: 
       resId = R.layout.main; 
       break; 

     } 

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

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 
    } 
    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 
    } 
    @Override 
    public Parcelable saveState() { 
     return null; 
    } 


} 

} 

Qualsiasi aiuto è apprezzato!

risposta

46

chiamata:

mPager.setCurrentItem(2); 

nel metodo onClick(), o per un cartiglio più agevole:

mPager.setCurrentItem(2, true); 
+0

ho provato ma ottengo un "Varialbe 'mPager' si accede dall'interno di classe interna deve essere dichiarato finale.". – PhDeOliveira

+0

Suppongo che la mia chiamata onClick sia nel posto sbagliato. Dove dovrei metterlo? – PhDeOliveira

+0

mPager deve essere dichiarato come finale –

0

non posso davvero rispondere esattamente perché questo accade, ma se si ritarda l'setCurrentItem chiamare per pochi millisecondi dovrebbe funzionare. La mia ipotesi è che, poiché durante lo onResume non è ancora stato eseguito il rendering, e il ViewPager ha bisogno di uno o qualcosa del genere.

private ViewPager viewPager; 

@Override 
public void onResume() { 
    final int pos = 3; 
    viewPager.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      viewPager.setCurrentItem(pos); 
     } 
    }, 100); 
} 

risposta originale:here

Problemi correlati