簡體   English   中英

如何在 Fragment 中訪問父活動視圖

[英]How to access parent Activity View in Fragment

我有一個ActionBarActivity和片段。 我正在使用FragmentPagerAdapter為我的應用程序提供片段。 我的問題如何在 Fragment 中訪問父活動視圖?

您可以使用

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

引用文檔

具體來說,fragment 可以通過 getActivity() 訪問 Activity 實例,並輕松執行諸如在 Activity 布局中查找視圖等任務

首先,創建一個這樣的視圖:

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 中,很容易在 Fragment 中訪問父活動視圖

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

請注意,如果您從活動中使用 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM