So greifen Sie in Fragment auf die übergeordnete Aktivitätsansicht zu

Lesezeit: 2 Minuten

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?

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 wie getActivity() 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)

1255710cookie-checkSo greifen Sie in Fragment auf die übergeordnete Aktivitätsansicht zu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy