18

Jeden z moich układów wewnątrz mojego ViewPagera ma przycisk. "R.layout.add_site". Chciałbym nacisnąć przycisk i przewiń do konkretnej strony. Mam już możliwość przesuwania do określonej strony, ale chciałbym mieć oba.Przycisk w ViewPager przejdź do określonej strony

Teraz jestem pewien, że jest sposób, aby to zrobić, ale z jakiegoś powodu nie mogę tego rozgryźć.

Zobaczysz, że podjąłem próbę, ale po prostu nie wiem, jaką metodę wybrać, aby przewinąć ją do żądanej strony. Który jest R.layout.main.

Oto mój kod.

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


} 

} 

Każda pomoc jest doceniana!

Odpowiedz

46

wezwanie:

mPager.setCurrentItem(2); 

w sposobie swojej onClick(), lub dla łatwiejszego przewijania:

mPager.setCurrentItem(2, true); 
+0

Próbowałem to, ale ja dostać "Varialbe 'mPager' jest dostępny z poziomu wewnętrznej klasy Musi być zadeklarowane ostateczne.". – PhDeOliveira

+0

Uważam, że moje połączenie onClick jest w niewłaściwym miejscu. Gdzie powinienem to umieścić? – PhDeOliveira

+0

mPager musi być zadeklarowany jako ostateczny –

0

nie mogę odpowiedzieć dokładnie dlaczego tak się dzieje, ale jeśli opóźnienie setCurrentItem zadzwoń na kilka milisekund, które powinno zadziałać. Domyślam się, że podczas onResume nie było jeszcze przepustki renderowania, a ViewPager potrzebuje jednego lub czegoś podobnego.

private ViewPager viewPager; 

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

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

Original Odpowiedź:here

Powiązane problemy