387 Stimmen

Aufruf einer Aktivitätsmethode aus einem Fragment

Ich versuche, eine Methode in meiner Aktivität von einem Fragment aus aufzurufen. Ich möchte, dass das Fragment der Methode Daten gibt und die Daten erhält, wenn die Methode zurückkehrt. Ich möchte erreichen, ähnlich wie auf eine statische Methode aufrufen, aber ohne die Verwendung von statischen, weil es Probleme in der Aktivität erstellen.

Ich bin neu bei Fragmenten und brauche eine einfache und pädagogische Erklärung!

Danke!

0voto

((YourActivityName)getActivity()).functionName();

Beispiel: ((SessionActivity)getActivity()).changeFragment();

Hinweis: Der Klassenname sollte in public stehen.

0voto

Vivek Beladiya Punkte 1

Vom Fragment zur Aktivität:

((YourActivityClassName)requireActivity()).yourPublicMethod();

-1voto

Ronnie Punkte 117

Ich denke, es wäre ein besserer Ansatz, die activity Instanz bei der Initialisierung des Fragments. Ich übergab die Instanz wie unten:

class FragmentSignUp : Fragment() {

    private lateinit var authActivity: AuthenticateActivity

    ...

    companion object {

        fun newInstance(a: AuthenticateActivity): FragmentSignUp {
            val fragment = FragmentSignUp()
            fragment.authActivity = a
            return fragment
        }
    }
}

Jetzt können Sie das Fragment mit der übergebenen Aktivitätsinstanz initialisieren und auch jede öffentliche Methode in Ihrer Aktivität aufrufen. Wie unten:

val fragmentManager = supportFragmentManager
val fragment = FragmentSignUp.newInstance(this)

fragmentManager.beginTransaction().replace(R.id.authenticate_fragment, fragment, FragmentSignUp::class.java.simpleName)
            .commit()

Sie können nun auf die öffentliche Methode Ihrer Aktivität in Ihrem Fragment zugreifen; wie in meinem Fall:

authactivity.goToLogInFragment()

In Java sollte Ihre Fragmentklasse lauten:

public class FragmentSignUp extends Fragment {

    private AuthenticateActivity authActivity;

    public static FragmentSignUp newInstance(AuthenticateActivity a) {
        FragmentSignUp fragment = new FragmentSignUp();
        fragment.authActivity = a;
        return fragment;
    }
}

Anmerkung: Wir können die Aktivität auch direkt in den Fragmentkonstruktor einfügen. Aber in den meisten Fällen sollten wir das vermeiden, da es zu Laufzeitproblemen führen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X