ich habe ein ActionBarActivity
und Fragment. ich benutze FragmentPagerAdapter
das stellt meiner App ein Fragment zur Verfügung. Meine Frage Wie kann ich in Fragment auf die übergeordnete Aktivitätsansicht zugreifen?
So greifen Sie in Fragment auf die übergeordnete Aktivitätsansicht zu
Sie können verwenden
View view = getActivity().findViewById(R.id.viewid);
Dokumente zitieren
Insbesondere kann das Fragment mit getActivity() auf die Aktivitätsinstanz zugreifen und problemlos Aufgaben ausführen, wie z. B. das Suchen einer Ansicht im Aktivitätslayout
-
Funktioniert, aber ich würde eine Schnittstelle verwenden, um mit der Aktivität oder so etwas zu kommunizieren.
– DeliriumTremens
5. April 2014 um 18:25 Uhr
-
Gerne können Sie auch die Schnittstelle verwenden. Aber das ist für die Kommunikation mit Aktivität
– Raghunandan
5. April 2014 um 18:26 Uhr
-
Ja, wer weiß, wie der Zustand sein wird, hacky, ich weiß, aber ich esse zu Mittag.
– Kevin Parker
25. Februar 2015 um 16:24 Uhr
-
Cool, Sie müssten nur prüfen, ob Fragment von isAdded() hinzugefügt wurde, um einen Absturz zu vermeiden, wenn die Aktivität noch nicht angehängt ist.
– Maher Abuthraa
14. Mai 2017 um 18:34 Uhr
-
Android-Dokumente sind sehr dumm geschrieben. Dokumente zitiert als
Specifically, the fragment can access the Activity instance with getActivity() and easily perform tasks such as find a view in the activity layout
noch liest Android Studio Warnung wiegetActivity() may be null
– Farid
10. August 2019 um 13:36 Uhr
Erstellen Sie zunächst eine Ansicht wie diese:
View view = getActivity().findViewById(R.id.viewid);
Konvertieren Sie es dann in eine beliebige Ansicht, die Sie wie folgt benötigen:
if( view instanceof EditText ) {
editText = (EditText) view;
editText.setText("edittext");
//Do your stuff
}
oder
if( view instanceof TextView ) {
TextView textView = (TextView) view;
//Do your stuff
}
In Kotlin ist es sehr einfach, auf die übergeordnete Aktivitätsansicht in Fragment zuzugreifen
activity!!.textview.setText("String")
Beachten Sie, dass es bei Verwendung von findViewById<>() aus der Aktivität nicht funktioniert, wenn Sie es aus dem Fragment aufrufen. Sie müssen die Ansicht einer Variablen zuweisen. Hier ist mein Fall
Das funktioniert nicht
class MainActivity{
fun onCreate(...){
//works
setMyText("Set from mainActivity")
}
fun setMyText(s: String){
findViewById<TextView>(R.id.myText).text = s
}
}
________________________________________________________________
class ProfileFragment{
...
fun fetchData(){
// doesn't work
(activity as MainActivity).setMyText("Set from profileFragment")
}
}
Das funktioniert
class MainActivity{
private lateinit var myText: TextView
fun onCreate(...){
myText = findViewById(R.id.myText)
// works
setMyText("Set from mainActivity")
}
fun setMyText(s: String){
myText.text = s
}
}
________________________________________________________________
class ProfileFragment{
...
fun fetchData(){
// works
(activity as MainActivity).setMyText("Set from profileFragment")
}
}
Wenn Sie Kotlin verwenden, können Sie diese Syntax verwenden
val view= requireActivity().findViewById<YourVIEW>(R.id.view_id)