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

電話:

mPager.setCurrentItem(2); 

在你的onClick()方法,或爲平滑滾動:

mPager.setCurrentItem(2, true); 
+0

我想,但我得到一個「Varialbe‘mPager’從內部類訪問需要聲明最後。」 – PhDeOliveira

+0

我認爲我的onClick電話是在錯誤的地方。我應該把它放在哪裏? – PhDeOliveira

+0

必須將mPager聲明爲final –

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

相關問題