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.