18

ViewPager'ım içindeki düzenlerimden birinde bir düğme var. "R.layout.add_site". Düğmeye basma seçeneğini tercih ediyorum ve benim için belirli bir sayfaya ilerliyorum. Belirli bir sayfaya geçmek için zaten seçeneğim var, ama ikisine de sahip olmak istiyorum.ViewPager düğmesindeki özel sayfaya kaydır

Şimdi eminim bunu yapmanın bir yolu var, ama bir nedenden dolayı, bunu anlayamıyorum.

Denemeye çalıştığımı göreceksiniz, ancak istenen sayfaya kaydırmak için hangi yöntemi çağırmanız gerektiğini bilmiyorum. Hangisi R.layout.main.

İşte kodum.

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; 
    } 


} 

} 

Herhangi bir yardım için teşekkür ederiz!

cevap

46

çağrı:

mPager.setCurrentItem(2); 
sizin onClick() yönteminde

veya daha yumuşak bir kaydırma için:

mPager.setCurrentItem(2, true); 
+0

Denedim ama olsun "Varialbe 'mPager' iç sınıf içinde erişilir nihai ilan edilmesi gerekiyor.". – PhDeOliveira

+0

OnClick aramamın yanlış yerde olduğunu anlıyorum. Onu nereye koymalıyım? – PhDeOliveira

+0

mPager, son –

0

Gerçekten tam Böyle NEDEN cevap ama olamaz sen setCurrentItem gecikme olursa Çalışması birkaç milisaniye için çağrı. Benim tahminim şu ki, onResume sırasında henüz bir oluşturma geçişi olmadı ve ViewPager'ın buna benzer bir şeye ihtiyacı var.

private ViewPager viewPager; 

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

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

Orjinal Cevap:here