【发布时间】:2014-05-17 23:52:43
【问题描述】:
我有一个ActionBarActivity 和片段。我正在使用为我的应用程序提供片段的FragmentPagerAdapter。我的问题如何在 Fragment 中访问父活动视图??
【问题讨论】:
标签: android android-fragments fragment
我有一个ActionBarActivity 和片段。我正在使用为我的应用程序提供片段的FragmentPagerAdapter。我的问题如何在 Fragment 中访问父活动视图??
【问题讨论】:
标签: android android-fragments fragment
你可以使用
View view = getActivity().findViewById(R.id.viewid);
引用文档
具体来说,fragment 可以通过以下方式访问 Activity 实例 getActivity() 并轻松执行任务,例如在 活动布局
【讨论】:
Specifically, the fragment can access the Activity instance with getActivity() and easily perform tasks such as find a view in the activity layout 的文档,但 Android Studio 警告显示为 getActivity() may be null
在 Kotlin 中,很容易在 Fragment 中访问父 Activity 视图
activity!!.textview.setText("String")
【讨论】:
首先,创建一个像这样的视图:
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
}
【讨论】:
请注意,如果您从活动中使用 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")
}
}
【讨论】:
如果你使用的是 kotlin,那么你可以使用这个语法
val view= requireActivity().findViewById<YourVIEW>(R.id.view_id)
【讨论】: