18

ViewPagerのレイアウト内にはボタンがあります。 "R.layout.add_site"ボタンを押すオプションが欲しくて、それは私のために特定のページにスクロールします。私は既に特定のページにスワイプするオプションがありますが、私は両方を持っていたいと思います。ViewPagerのボタンは特定のページにスクロールします

私はそれを行う方法があると確信していますが、何らかの理由で私はそれを理解することができません。

私は試みてきたが、目的のページにスクロールさせるためにどのメソッドを呼び出すべきかわからない。 R.layout.mainはどちらですか?

ここに私のコードです。

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


} 

} 

助けてください!

答えて

46

コール:あなたのonClick()メソッドで

mPager.setCurrentItem(2); 

、またはスムーズなスクロールのために:

mPager.setCurrentItem(2, true); 
+0

私はそれを試してみましたが、私は得る「Varialbe 『mPager』は内部クラス内からアクセスされ、最終的に宣言する必要があります。。」 – PhDeOliveira

+0

私のonClickコールが間違った場所にあると思います。どこに置くべきですか? – PhDeOliveira

+0

mPagerは最終的に –

0

まさにこれがなぜ起こるか私は本当に答えることはできませんが、setCurrentItemを遅らせる場合それは動作するはずです数ミリ秒を呼び出します。私の推測は、onResumeの間にまだレンダリングパスが存在しないため、ViewPagerにそのようなものが必要なためです。

private ViewPager viewPager; 

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

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

オリジナル回答:here

関連する問題