2014-07-06 6 views
13

Vielen Dank für Ihre Hilfe im fortgeschrittenen Stadium. Und tut mir leid, wenn das eine sehr dumme Frage ist, aber ich kann sie nirgendwo anders finden. Was ich will, ist im Grunde, um die Gesamtmenge der Seiten zu bestimmen, die ich in meinem ViewPager habe, wenn alles eingerichtet ist, wie in meinem Code. Ich habe (in einer späteren Version) versucht, die "Größenvariable" zu f als Argument hinzuzufügen (siehe FirstFragment). Es ist keine bekannte Nummer, da die Benutzereingabe die Anzahl der Formulare (Ansichten) ist, die ich erstellen werde, und sie an FirstFragment als Absicht weitergibt. So habe ich es versucht:So finden Sie die "letzte Seite" in einem Pager. Oder die Gesamtzahl der Ansichten. Android Development

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

Inside FirstFragment. Aber wenn UserFragment seine Argumente unter "Seitenzahlen" extrahiert, gibt es 0 zurück. Ich habe dann versucht, Zugriff auf die getCount() -Methode zu bekommen, die in FragmentAdapter lebt, aber ich bin mir nicht sicher, wie ich das machen soll, da ich ' m in UserFragment, wenn ich es brauche.

Was ich versuche, vielleicht zu klären, ist, dass ich "aktuelle Seiteninformationen" extrahiere, die ich dank eines früheren Beitrags von mir und denen, die geholfen haben, jetzt funktioniert. Jetzt möchte ich sehen, ob "currentpage == size (// was ist die Anzahl der Seiten. Gesamtansichten im viewpager)". Also in der onClick-Methode können Sie in UserFragment sehen, wenn es die letzte Seite ist, und der Benutzer die Taste drückt, um zur nächsten Seite zu gehen. Ich möchte, dass es zu einer anderen Aktivität springt, wo es alle SparseArray-Daten manipuliert, die von allen Formularen gesammelt wurden. (Was ich brauche, um diese SparseArray-Daten in eine Absicht zu schreiben, werde ich wahrscheinlich eine neue Frage stellen ... da sie nicht sehr verwandt ist). Also, wenn Sie mir helfen könnten, meine aktuellen Arbeitsanstrengungen zu bekommen (wie man es richtig macht) oder einfach eine völlig neue Methode vorschlägt, bin ich glücklich. Solange ich es funktioniere!

Vielen Dank für Ihre Hilfe, im fortgeschrittenen Stadium. 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 zu sehen brauchen, lassen Sie es mich wissen. Aber das nervt mich wirklich. Also wenn jemand da draußen mir 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 (dies ist meine Tätigkeit):

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 MAßNAHME:

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) 
+0

Wenn ViewPager im Leerlauf ist, sind die Gesamtansichten immer 3 (Mitte erreicht) oder 2 (Kante erreicht), die letzte Seite ist 'currentItem + 1', das ist die Regel, keine Schätzung. – VinceStyling

Antwort

40

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

0

in OnCreate():

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


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

Der folgende Code funktioniert gut 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

Ich habe das in meiner UserFragment-Datei in OnCreate() versucht; und ich bekomme diese LogCat-Datei (die App stürzt ab): Ich werde die Protokoll-Katze in einer Bearbeitung zu meinem OP hinzufügen – Leon92

+0

Was ist die Zeilennummer 34 in Ihrem zugehörigen Code? – Skynet

+0

Zeile 34 = int pagenum = vp.getChildCount(); – Leon92

Verwandte Themen