Fragment mit Button aufrufen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Fragment mit Button aufrufen?

    Hallo,

    Ich habe eine App mit einem FrameLayout programmieren, diese App funktioniert so weit auch gut.
    Der einzige "Schönheitsfehler" ist, beim Aufruf kommt der User auf einen scheinbar leeren Bildschirm mit dem Navigation Drawer,

    Jetzt habe ich in der AndroidManifest.xml eine neue Activity als Start-Acrivity definiert und wollte da eigentlich ein Button einfügen damit der Anwender den Startbildschirm wegblicken kann und dann zur Navigation kommt.

    Ich bring es aber nicht fertig den Button mit dem Fragment zu verknüpfen das aufgreift werden soll.

    Wie kann ich ein Fragment oder das FrameLLayout mit einem Button verknüpfen?

    Das betreffende Projekt findet ihr auf GitHup,

    Petra

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Petra ()

  • Hi, eigentlich ist das nicht viel anders. Da du in eine Fragment bist und die onKlick Events in der MainActivity ankommen musst du den Oncklicklistner in der Fragment Klasse Importieren.

    Bei der Einrichtung der Button mit ( findViewByIId) im Fragment brauchst du den bezug zur Activity in dem das Fragment läuft ( getActivity() )


    public class FragKlass extends Fragment implements OnClickListener {
    ...
    public void onActivityCreated(Bundle savedInstanceState) {
    ...
    Button bt = (Button) getActivity().findViewById(R.Id.button1):
    bt.setOnClickListener(this);
    ...
    }

    public void onClick(View v) {
    // Clickhandler für deine Button

    }

    Ps. Das Attribut onclick ist in XML nicht nutzbar.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Hallo,


    Danke für Deine Antwort.

    Bin jetzt gar nicht sicher ob wir uns richtig verstanden haben.
    Du schreibst "Da du in eine Fragment bis..."
    Wenn ich mein Problem richtig verstehe muss über eine Activity ausserhalb des FrameLayout auf ein Fragment zugreifen.

    Ich versuche mal zu beschreiben, was ich bisher im Projekt gemacht habe, damit Du das ganze nachvollziehen kannst.

    Als Vorlage für das Projekt habe das YouTub-Video genommen und an meine Bedürfnisse angepasst.
    Ich habe aber leider nicht realisiert, dass das Projekt im Video so realisiert wurde, dass beim Start der App das leere FrameLayout angezeigt wird. Der Anwender kriegt also das zu sehen.



    [IMG:blob:https://android-developers.de/cb9a59c1-42f7-475c-bc1f-326dbe22756c]

    Damit der Anwender nicht auf einen leeren Bildschirm kommt, habe ich mir gedacht, ich könnte einfach eine andere Activity mit einen Button "darüber legen".

    z.B so
    [IMG:blob:https://android-developers.de/929a2d78-1ea2-4f57-b8e4-b1711932ad78]

    Und den Butten zum Aufruf eines der Menüs verwenden.

    [IMG:blob:https://android-developers.de/c129a677-f3c8-4c84-8ed2-747265dc9652]


    Ich muss also den Button mit gleichen Funktionalität wie z.B. den Menüeintrag Welcome hinterlegen, damit der Anwender nach dem Klick auf den Continue Button gleich im FrameLayout landet und nicht auf einen hässlichen leeren Bildschirm.

    Ich habe es fertig gebracht in der AndroidManifest.xml die Datei zu ändern, die beim Start aufgerufeasgeführt wird. Hingegen ist mir nicht klar wie und wo ich den Continue Bitton mit dem FrameLaout verbinden muss.
    Alles was ich bisher versucht habe, funktionierte enter gar nicht oder die App stürzte ab sobald man auf den Button geklickt hat.


    Du findest die App auf GitHup. allerdings eine ältere Version, bei der man noch auf den leeren Bildschirm kommt beim Start.

    Hoffe etwas Lichts ins Dunkle gebrach zu haben.
    Petra
  • Hi,

    Petra schrieb:

    Wenn ich mein Problem richtig verstehe muss über eine Activity ausserhalb des FrameLayout auf ein Fragment zugreifen.
    ein Fragment läuft nie alleine es läuft immer in einer Activity. Meist die MainAcktivity in der auch der Navdrawer läuft. Die Activity wird also nicht beendet. Clickevents kommen in der Activity an und müssen an die FragmentKlasse weitergereicht werden. deshalb importiern des Listner und getActivity für den bezug zu übergeordnenden Activity.

    Nur wieso willst du eine andere Activity starten? Dies würdest du mit einen Intent machen und da würde deine Mainactivity beendet. und dein schöner Navdrawer währe auch weg.

    führe doch in der onCreate die entsprechende TransAction aus zu deinen Start Fragment aus.

    PS. Habe mir deinen Quellcode angesehen, und gemerkt das du gar keine Button ... in den Fragments hast. Somit brauchst du den Listner auch nicht. Solltest du einen Button im Fragment brauchen weisst du nun wie die OnClick Methode erstellst.

    Ich glaube das mit dem Frame Layout verstehst du etwas falsch. Dies dient nur als Container Platzhalter für die Layouts die in den Fragment Klasse geladen werde. Es wird somit immer nur der Platzhalter "content_main.xml" mit dem Layout des Fragments gefüllt.
    dein Activity_main.xml bleibt somit die ganze zeit geladen.

    Sinnvoll ist auch im NavDrawer zuprüfen ob das jeweilige Fragment schon geladen ist.

    Quellcode

    1. @Override
    2. protected void onCreate(Bundle savedInstanceState) {
    3. super.onCreate(savedInstanceState);
    4. setContentView(R.layout.activity_main);
    5. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    6. setSupportActionBar(toolbar);
    7. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    8. ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
    9. this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    10. drawer.addDrawerListener(toggle);
    11. toggle.syncState();
    12. NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    13. navigationView.setNavigationItemSelectedListener(this);
    14. Fragment fragment = new WelcomeFragment();
    15. FragmentManager fragmentManager = getSupportFragmentManager();
    16. FragmentTransaction ft = fragmentManager.beginTransaction();
    17. ft.replace(R.id.screen_area, fragment);
    18. ft.commit();
    19. }
    Alles anzeigen
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Hallo,
    Danke für Deine Antwort.
    Ich werde mir den Quellcode ansehen.

    Und ja ich habe im WelcomeFragment kein Button eingefügt, da dies gar nicht vorgesehen war.
    Ich bin gar nicht auf die Idee gekommen, das Fragment direkt aufzurufen. Wen man das kann brauche ich auch kein Button. Ich möchte nur, dass beim Start gleich der Welcome-Bildschirm zu sehen ist und nicht ein leerer Screen.

    Petra