如何在片段中访问父活动视图

我找到了 ActionBarActivity和碎片。我使用的是 FragmentPagerAdapter,它为我的应用程序提供了片段。我的问题如何在片段中访问父活动视图?

61325 次浏览

你可以用

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

引用文件

具体来说,片段可以使用 GetActivity ()并轻松执行任务,例如在 活动布局

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

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
}

在 Kotlin,很容易访问父级活动视图碎片

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

请注意,如果使用 findViewById < > () from activity,那么如果从片段调用它,它将无法工作。您需要将视图分配给变量。这是我的箱子

这不管用

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

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

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