Bot
Bot

Reputation: 2295

How to access parent Activity View in Fragment

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 ??

Upvotes: 76

Views: 65705

Answers (5)

Yazdan Ilyas
Yazdan Ilyas

Reputation: 412

if you are using kotlin then you can use this syntax

val view= requireActivity().findViewById<YourVIEW>(R.id.view_id)

Upvotes: 2

Irfandi D. Vendy
Irfandi D. Vendy

Reputation: 1004

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

Upvotes: 2

kishan verma
kishan verma

Reputation: 1000

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

activity!!.textview.setText("String")

Upvotes: 9

Mohsen mokhtari
Mohsen mokhtari

Reputation: 3062

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
}

Upvotes: 9

Raghunandan
Raghunandan

Reputation: 133560

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

Upvotes: 192

Related Questions