How to access parent Activity View in Fragment

前端 未结 4 1065
刺人心
刺人心 2021-01-31 06:58

I have an ActionBarActivity and fragment. I am using FragmentPagerAdapter that provides fragment to my app. My question How can I access parent Activit

相关标签:
4条回答
  • 2021-01-31 07:42

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

    activity!!.textview.setText("String")
    
    0 讨论(0)
  • 2021-01-31 07:44

    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

    0 讨论(0)
  • 2021-01-31 07:53

    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
    }
    
    0 讨论(0)
  • 2021-01-31 07:57

    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")
        }
    }
    
    0 讨论(0)
提交回复
热议问题