wake-up-neo.com

Schaltfläche in ViewPager zum Blättern zu einer bestimmten Seite

Eines meiner Layouts in meinem ViewPager verfügt über eine Schaltfläche. "R.layout.add_site". Ich möchte die Option, die Schaltfläche zu drücken, und es wird zu der spezifischen Seite für mich geblättert. Ich habe bereits die Möglichkeit, zu einer bestimmten Seite zu streichen, aber ich hätte gerne beides.

Ich bin mir sicher, dass es einen Weg gibt, dies zu tun, aber aus irgendeinem Grund kann ich es nicht verstehen.

Sie werden sehen, dass ich einen Versuch unternommen habe, aber Sie wissen nicht, welche Methode aufgerufen werden soll, damit sie zur gewünschten Seite scrollen kann. Welches ist R.layout.main.

Hier ist mein Code.

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


}

}

Jede Hilfe wird geschätzt!

18
PhDeOliveira

anruf :

 mPager.setCurrentItem(2);

in Ihrer onClick () -Methode oder für eine flüssigere Bildlaufleiste:

mPager.setCurrentItem(2, true); 
51
Ercan

Ich kann nicht wirklich WARUM antworten, warum genau dies geschieht, aber wenn Sie den Aufruf von setCurrentItem um einige Millisekunden verzögern, sollte dies funktionieren. Meine Vermutung ist, dass es während onResume noch keinen Rendering-Durchlauf gab und der ViewPager einen oder ähnliches benötigt.

private ViewPager viewPager;

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

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

Ursprüngliche Antwort: hier

0
Naveen Kumar M