75

I have an ActionBarActivity and fragment. I am using FragmentPagerAdapter that provides fragment to my app. My question How can I access parent Activity View in Fragment ??

Bot
  • 2,285
  • 3
  • 17
  • 20

5 Answers5

188

You can use

View view = getActivity().findViewById(R.id.viewid);

Quoting docs

Specifically, the fragment can access the Activity instance with getActivity() and easily perform tasks such as find a view in the activity layout

Raghunandan
  • 132,755
  • 26
  • 225
  • 256
9

At first, create a view like this:

View view = getActivity().findViewById(R.id.viewid);

Then convert it to any view that you need like this:

 if( view instanceof EditText ) {
            editText = (EditText) view;
            editText.setText("edittext");
            //Do your stuff
        }

or

if( view instanceof TextView ) {
  TextView textView = (TextView) view;
  //Do your stuff
}
Mohsen mokhtari
  • 2,841
  • 1
  • 30
  • 39
9

In Kotlin it is very easy to access parent Activity View in Fragment

activity!!.textview.setText("String")
kishan verma
  • 984
  • 15
  • 17
2

Note that if you are using findViewById<>() from activity, it wont work if you call it from fragment. You need to assign the view to variable. Here is my case

This doesn't work

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")
    }
}

This works

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")
    }
}
Irfandi D. Vendy
  • 894
  • 12
  • 20
2

if you are using kotlin then you can use this syntax

val view= requireActivity().findViewById<YourVIEW>(R.id.view_id)
Yazdan Ilyas
  • 374
  • 4
  • 8