wake-up-neo.net

So finden Sie die "letzte Seite" in einem View-Pager. Oder die Gesamtanzahl der Aufrufe. Android-Entwicklung

Vielen Dank für Ihre Hilfe in Advanced. Und tut mir leid, wenn dies eine sehr dumme Frage ist, aber ich kann sie nicht woanders finden. Grundsätzlich möchte ich die Gesamtanzahl der Seiten in meinem ViewPager bestimmen, wenn alles eingerichtet ist, wie in meinem Code. Ich habe (in einer späteren Version) versucht, die "Größenvariable" als Argument zu f hinzuzufügen (siehe FirstFragment). Es ist keine bekannte Nummer, da die Benutzereingabe die Anzahl der Formulare (Ansichten) ist, die ich erstellen werde, und sie als Absicht an FirstFragment übergibt. Also habe ich versucht:

Fragment f = new UserFragment();
Bundle bundl = new Bundle();
bundl.putInt("pagenumbers", size);
f.setArguments(bundl);
lf.add(f); 

Innerhalb von FirstFragment. Aber wenn UserFragment seine Argumente unter "pagenumbers" extrahiert, gibt es 0 zurück. Ich habe dann versucht, Zugriff auf die getCount () -Methode zu erhalten, die sich in FragmentAdapter befindet in UserFragment, wenn ich es brauche.

Ich versuche zu klären, indem ich "aktuelle Seiteninformationen" extrahiere, an denen ich jetzt dank eines früheren Beitrags von mir und denen, die geholfen haben, arbeite. Jetzt möchte ich sehen, ob "currentpage == size (// das ist die Anzahl der Seiten. Gesamtansichten im ViewPager)". In der onClick-Methode können Sie also in UserFragment sehen, ob es sich um die letzte Seite handelt, und der Benutzer klickt auf die Schaltfläche, um zur nächsten Seite zu wechseln. Ich möchte, dass es zu einer anderen Aktivität wechselt, in der alle SparseArray-Daten bearbeitet werden, die von allen Formularen gesammelt wurden. (Wofür ich Hilfe benötige, um diese SparseArray-Daten in eine Absicht zu bringen, werde ich wahrscheinlich eine neue Frage damit stellen ... da es nicht sehr verwandt ist). Wenn Sie mir also entweder dabei helfen könnten, meine aktuellen Versuche zum Laufen zu bringen (wie man es richtig macht) oder einfach eine völlig neue Methode vorschlagen, bin ich glücklich. Solange ich es zum Laufen bringen kann!

Vielen Dank für Ihre Hilfe im Voraus. Bitte helfen Sie!

Mein UserFragment.Java :

    package com.example.thinice;

import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.support.v4.view.ViewPager;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.view.ViewGroup;
import Android.widget.Button;
import Android.widget.EditText;
import Android.widget.TextView;

public class UserFragment extends Fragment {


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.layout_avgcalcform,
                container, false);
        final EditText markc = (EditText)rootView.findViewById(R.id.editTextASSMARK);
        final EditText marktotc = (EditText)rootView.findViewById(R.id.editTextASSTOT);
        final EditText assvalc = (EditText)rootView.findViewById(R.id.editTextASSWORTH);
        int currentviewnum =  ((FirstFragment) getActivity()).getPager().getCurrentItem();
        String pagenum = Integer.toString(currentviewnum);

           TextView tv = (TextView) rootView.findViewById(R.id.avg_testtv);
             tv.setText(pagenum);
        Button b = (Button) rootView.findViewById(R.id.button1);
        b.setOnClickListener( new View.OnClickListener(){

               public void onClick(View v){

        int currentviewnum =  ((FirstFragment)    getActivity()).getPager().getCurrentItem();
                   ((FirstFragment) getActivity()).saveData(new  Question(markc.getText().toString(),marktotc.getText().toString(),assvalc.getText().toString()));
                   ((FirstFragment) getActivity()).getPager().setCurrentItem(currentviewnum+1);



               }
    });
        return rootView;

    }   

}

Wenn Sie mehr von meinem Code sehen möchten, lassen Sie es mich bitte wissen. Aber das nervt mich wirklich. Wenn mir da draußen jemand helfen könnte, wäre es fantastisch! Vielen Dank im Voraus.

FragmentAdapter.Java :

     package com.example.thinice;

import Java.util.ArrayList;
import Java.util.List;

import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentManager;
import Android.support.v4.app.FragmentPagerAdapter;
import Android.view.ViewGroup;

public class FragmentAdapter extends FragmentPagerAdapter{


    private List<Fragment> fragments;



    public FragmentAdapter(FragmentManager fragmentManager, ArrayList<Fragment> fragments) {
        super(fragmentManager);
            this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        //Bundle args = new Bundle();
        //args.putInt("page_position", position+1);
        //((Fragment) fragments).setArguments(args);
        return this.fragments.get(position);
    }

    @Override
    public void destroyItem (ViewGroup container, int position, Object object)
    {
        super.destroyItem(container, position, object);
    }

    @Override
    public int getCount() {
       return this.fragments.size();
    }
}

FirstFragment.Java (das ist meine Aktivität) :

    package com.example.thinice;



import Java.util.ArrayList;

import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.view.ViewPager;
import Android.util.SparseArray;
import Android.widget.Button;

public class FirstFragment extends FragmentActivity 
  {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_viewpager);

        // Check whether the activity is using the layout version with
        // the fragment_container FrameLayout. If so, we must add the first fragment
        int size = getIntent().getExtras().getInt("numass1");
        ViewPager vp = (ViewPager) findViewById(R.id.viewPager);



            if (savedInstanceState != null) {
                return;
            }

            ArrayList<Fragment> lf = new ArrayList<Fragment>();
            for(int count=0; count<size; count ++){

                Fragment f = new UserFragment();
                lf.add(f);







            }

 FragmentAdapter hello = new FragmentAdapter(getSupportFragmentManager() , lf);
            vp.setAdapter(hello);
          //  vp.setOffscreenPageLimit(size);


        }

    SparseArray<Question> questions = new SparseArray<Question>();
    public void saveData(Question quest){
        ViewPager vp = (ViewPager) findViewById(R.id.viewPager);
           questions.put(vp.getCurrentItem(), quest);

    }
    public ViewPager getPager() {
        ViewPager vp = (ViewPager) findViewById(R.id.viewPager);
        return vp;
    }




    }

EDIT: LOGCAT-DATEI FÜR EMPFOHLENE LÖSUNG :

07-06 20:51:50.241: D/AndroidRuntime(8151): Shutting down VM
07-06 20:51:50.241: W/dalvikvm(8151): threadid=1: thread exiting with uncaught exception    (group=0x415a4ba8)
07-06 20:51:50.251: E/AndroidRuntime(8151): FATAL EXCEPTION: main
07-06 20:51:50.251: E/AndroidRuntime(8151): Process: com.example.thinice, PID: 8151
07-06 20:51:50.251: E/AndroidRuntime(8151): Java.lang.NullPointerException
07-06 20:51:50.251: E/AndroidRuntime(8151):     at com.example.thinice.UserFragment.onCreateView(UserFragment.Java:34)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.app.Fragment.performCreateView(Fragment.Java:1500)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:927)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1104)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:682)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1467)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.Java:472)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.Java:141)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.view.ViewPager.populate(ViewPager.Java:1068)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.view.ViewPager.populate(ViewPager.Java:914)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.support.v4.view.ViewPager.onMeasure(ViewPager.Java:1436)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.View.measure(View.Java:16497)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:310)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.View.measure(View.Java:16497)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at com.Android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.Java:327)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.View.measure(View.Java:16497)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:310)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at com.Android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.Java:2291)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.View.measure(View.Java:16497)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewRootImpl.performMeasure(ViewRootImpl.Java:1912)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.Java:1109)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewRootImpl.performTraversals(ViewRootImpl.Java:1291)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewRootImpl.doTraversal(ViewRootImpl.Java:996)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.Java:5600)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:761)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.Choreographer.doCallbacks(Choreographer.Java:574)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.Choreographer.doFrame(Choreographer.Java:544)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:747)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.os.Handler.handleCallback(Handler.Java:733)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.os.Handler.dispatchMessage(Handler.Java:95)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.os.Looper.loop(Looper.Java:136)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Android.app.ActivityThread.main(ActivityThread.Java:5001)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Java.lang.reflect.Method.invokeNative(Native Method)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at Java.lang.reflect.Method.invoke(Method.Java:515)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:785)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:601)
07-06 20:51:50.251: E/AndroidRuntime(8151):     at dalvik.system.NativeStart.main(Native Method)
14
Leon92

Sie sollten ViewPager.getAdapter () verwenden. GetCount () Die Methode getAdapter () gibt das Objekt zurück, das die Seiten für den ViewPager bereitstellt.

49
Andrew Orobator

in OnCreate ():

 ViewPager vp = (ViewPager) findViewById(R.id.viewPager);


System.out.println(vp.getChildCount());

Der folgende Code funktioniert einwandfrei für mich:

public class ViewFlipperMainActivity extends Activity {
    private ViewFlipper viewFlipper;
    private float lastX;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(R.layout.help_flipper);
        viewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);    
        System.out.println(viewFlipper.getChildCount());
    }
}
0
Skynet