Fragmentactivity startet zwei Fragmente, soll aber nur eines starten

  • 4 Antworten
  • Letztes Antwortdatum
F

fruchtdroid

Neues Mitglied
0
Hallo Leute,

ich benötige Hilfe in folgender Sache:

Ich habe eine Activity die von FragmentActivity erbt. In dem XMLlayout befindet sich nur der ViewPager, da der Screen nur von den Fragmenten gefüllt werden soll.
In der onCreat()-Methode wird nun folgender Code aufgerufen(Auschnitt):
Code:
mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                invalidateOptionsMenu();
            }
        });
Desweiteren habe ich eine inner private Klasse definiert:

Code:
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Log.i(TAG, "getItem -> position="+String.valueOf(position));
            return ScreenSlidePageFragment.create(position, context, idList);
        }

        @Override
        public int getCount() {
            return idList.length;
        }
    }
Die Methode ScreenSlidePageFragment.create(position, context, idList); gibt mir mein entsprechendes Fragment zurück. Dessen Inhalt sollte egal sein. Dies wird auch alle richtig angezeigt.
DIe Fragment sehen alle gleich aus und dienen dazu, zwischen Ihnen hin und her zu wischen. Nur der Inhalt der Texfelder und ähnlichem der Fragmente ändert sich.

DAS PROBLEM:
Wenn die Activity gestartet wird, werden nun die ersten beiden Fragmente erstellt. Laut LogCat wird getItem zweimal aufgerufen:
Code:
04-22 23:55:03.523: I/LearningActivity(16442): onCreate done
04-22 23:55:03.531: I/LearningActivity(16442): getItem -> position=0
04-22 23:55:03.531: I/ScreenSlidePageFragment(16442): Fragmentpagenumber: 0
04-22 23:55:03.539: I/LearningActivity(16442): getItem -> position=1
04-22 23:55:03.539: I/ScreenSlidePageFragment(16442): Fragmentpagenumber: 1
04-22 23:55:03.539: I/ScreenSlidePageFragment(16442): onCreate()
04-22 23:55:03.539: I/ScreenSlidePageFragment(16442): onCreateView()
04-22 23:55:03.546: I/ScreenSlidePageFragment(16442): onResume()
04-22 23:55:03.546: I/ScreenSlidePageFragment(16442): onCreate()
04-22 23:55:03.546: I/ScreenSlidePageFragment(16442): onCreateView()
04-22 23:55:03.546: I/ScreenSlidePageFragment(16442): onResume()
Ich möchte, wenn das Fragment zu sehen ist, eine bestimmte Sounddatei gespielt wird. Nur weiß ich leider nicht wann ich das machen soll, weil alles von onAttach() bis on Resume() beider Fragmente aufgerufen wird. Bei den nächsten Fragmenten funktioniert auch alles wunderbar, eben nur nicht beim Start.:confused:

Danke und viele Grüße
 
Ich verstehe nicht ganz wohin du willst?
getItem wird so oft aufgerufen, wie du in getCount definiert hast (in deinem fall 2).

Was willst du nun machen?

Gruß
 
Ich möchte, dass ein Sound abgespielt wird, wenn ein Fragment zu sehen ist. Natürlich den richtigen Sound. Durch wischen komm ich zum nächsten Fragment. Je nach dem wie lang die idList ist, gibt es der Länge entsprechend Anzahl an Fragmenten . Bei mir ist sie länger als zwei. Bei Start der Activity werden die ersten beiden Fragmente erzeugt etc. Siehe LogCat. Es sollte aber nur das erste erzeugen und das zweite beim ersten wischen.

Danke und Gruß

Gesendet von meinem HTC Desire mit der Android-Hilfe.de App
 
Schau mal hier
Da gibt es einen Listener, der aufegrufen wird, wenn eine neue "Seite" selected wird.

Gruß
 
Danke für den Hinweis. Das habe ich sogar schon im Quellcode, aber noch keine Beachtung dafür aufgebracht. Ich bin gerade, dabei diese Lösung zu probieren. Sieht aber schon soweit ganz gut aus.

Leider klärt sich die Frage mit den zwei Fragment zum Start der Activity nicht. Es werden immmer die ersten beiden Fragmente erstellt. Durch LogCat habe ich festgestellt, dass immer schon das nächste Fragment erstellt wird, damit man wohl smoothy wischen kann.

das Problem was sich aus dieser Lösung ergibt, ist dass ich die Methoden aus der Fragmentactivity in der Klasse Fragmente benötige. Ich hole mir jetzt immer die Activiy im Fragment mit getActivity(), caste diese auf meine Klasse und habe somit diese Instanz und ruf damit meine Funktion auf. Ist das sinnvoll? Oder gibt es da eine bessere Möglichkeit?

Grüße
 
Zurück
Oben Unten