Thank you for your help in advanced. And sorry if this is a very silly question, but I cannot find it elsewhere. What I want, is basically, to determine the total amount of pages I have in my ViewPager when it is all set up, like in my code. I have tried (on a later version) adding the "size variable" to f as it's argument (see, FirstFragment). It's not a known number, as the user input's the number of forms (view's) I will create, and passes it to FirstFragment as an intent. So I have tried :
Fragment f = new UserFragment(); Bundle bundl = new Bundle(); bundl.putInt("pagenumbers", size); f.setArguments(bundl); lf.add(f);
Inside FirstFragment. But when UserFragment extracts its arguments under "pagenumbers" it is returning 0. I then tried to gain access to the getCount() method that lives inside FragmentAdapter, however, I'm not sure how to go about this, given that I'm inside UserFragment when I need it.
What I'm trying to do maybe to help clarify, is I'm extracting "current page info" which I now have working thanks to an earlier post of mine and those whom helped. Now I want to see if "currentpage == size (//which is number of pages. Total views in the viewpager)". So in the onClick method you can see in UserFragment, if it's the last page, and the user hits the button to go to the next page. I want it to jump to another activity, where it manipulates all the SparseArray data that was collected from all the forms. (Which I need help on how to put this SparseArray data into an intent, I will probably make a new question with this ... as it's not very related). So if you could either assist me in getting my current attempts to work (how to do it properly) or just suggest an entirely new method I'm happy. As long as I can get it working!
Thank you very much for all your assistance, in advanced. Please help!
My 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; } }
If you need to see any more of my code, please let me know. But this is really annoying me. So if anybody out there could help me, it would be fantastic! Thank you very much in advanced.
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 (this is my activity) :
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 FILE FOR SUGGESTED SOLUTION :
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)
You should be using ViewPager.getAdapter().getCount() The getAdapter() method returns the object that supplies the pages for the ViewPager.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With