Comment trouver la “dernière page” dans un pager de vue. Ou le nombre total de vues. Développement Android

Merci pour votre aide en avance. Et désolé si cette question est très stupide, mais je ne la trouve pas ailleurs. Ce que je veux, en gros, est de déterminer le nombre total de pages que j’ai dans mon ViewPager quand tout est configuré, comme dans mon code. J’ai essayé (sur une version ultérieure) d’append la “variable de taille” à f comme argument (voir FirstFragment). Ce nombre n’est pas connu, car le nombre de formulaires (vues) que je créerai sera saisi par l’utilisateur et transmis à FirstFragment en tant qu’intention. Alors j’ai essayé:

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

À l’intérieur de FirstFragment. Mais lorsque UserFragment extrait ses arguments sous “pagenumbers”, il renvoie 0. J’ai ensuite essayé d’accéder à la méthode getCount () qui réside dans FragmentAdapter. Cependant, je ne suis pas sûr de la façon de procéder, étant donné que je suis dans UserFragment quand j’en ai besoin.

Ce que j’essaie de faire peut-être pour aider à clarifier, c’est que je suis en train d’extraire des “infos de page actuelles” que je travaille maintenant grâce à un de mes posts précédents et à ceux qui m’ont aidé. Maintenant, je veux voir si “currentpage == taille (// qui correspond au nombre de pages. Nombre total de vues dans le viewpager)”. Ainsi, dans la méthode onClick, vous pouvez voir dans UserFragment, s’il s’agit de la dernière page et que l’utilisateur appuie sur le bouton pour accéder à la page suivante. Je veux qu’il passe à une autre activité, où il manipule toutes les données SparseArray recueillies à partir de tous les formulaires. (Ce dont j’ai besoin d’aide sur la manière de mettre ces données SparseArray dans une intention, je vais probablement poser une nouvelle question avec ceci … car ce n’est pas très lié). Donc, si vous pouviez m’aider à obtenir mes tentatives actuelles de travail (comment le faire correctement) ou simplement suggérer une méthode entièrement nouvelle, je suis heureux. Tant que je peux le faire fonctionner!

Merci beaucoup pour toute votre aide, à l’avance. S’il vous plaît aider!

Mon 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(); Ssortingng pagenum = Integer.toSsortingng(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().toSsortingng(),marktotc.getText().toSsortingng(),assvalc.getText().toSsortingng())); ((FirstFragment) getActivity()).getPager().setCurrentItem(currentviewnum+1); } }); return rootView; } } 

Si vous avez besoin de voir plus de mon code, s’il vous plaît faites le moi savoir. Mais c’est vraiment m’énerver. Donc, si quelqu’un pouvait m’aider, ce serait fantastique! Merci beaucoup à l’avance.

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 fragments; public FragmentAdapter(FragmentManager fragmentManager, ArrayList 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 (c’est mon activité) :

  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 lf = new ArrayList(); 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 questions = new SparseArray(); 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; } } 

ÉDITER: FICHIER LOGCAT POUR LA SOLUTION SUGGÉRÉE :

 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) 

Vous devriez utiliser ViewPager.getAdapter (). GetCount () La méthode getAdapter () renvoie l’object fournissant les pages du ViewPager.

dans OnCreate ():

  ViewPager vp = (ViewPager) findViewById(R.id.viewPager); System.out.println(vp.getChildCount()); 

Le code suivant fonctionne bien pour moi:

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