我有ActionBarActivity
和片段。我正在使用FragmentPagerAdapter
为我的应用提供片段。我的问题如何在Fragment中访问父活动视图?
答案 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)