如何在Fragment中访问父Activity视图

时间:2014-04-05 16:30:01

标签: android android-fragments fragment

我有ActionBarActivity和片段。我正在使用FragmentPagerAdapter为我的应用提供片段。我的问题如何在Fragment中访问父活动视图?

5 个答案:

答案 0 :(得分:127)

您可以使用

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

引用文档

  

具体来说,片段可以访问Activity实例   getActivity()并轻松执行诸如查找视图之类的任务   活动布局

答案 1 :(得分:6)

首先,创建一个这样的视图:

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

然后将其转换为您需要的任何视图:

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

if( view instanceof TextView ) {
  TextView textView = (TextView) view;
  //Do your stuff
}

答案 2 :(得分:3)

  

在Kotlin中,很容易访问Fragment中的父活动视图

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

答案 3 :(得分:1)

请注意,如果您从活动中使用findViewById <>(),则从片段中调用它将无法工作。您需要将视图分配给变量。这是我的情况

这不起作用

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

这有效

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

答案 4 :(得分:0)

如果你使用 kotlin 那么你可以使用这个语法

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