首页 > 解决方案 > 在 Fragment 中单击按钮时通知 Activity

问题描述

我有一个活动:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var fragment = WheelFragment.newInstance("a", "b")
        supportFragmentManager.beginTransaction().replace(R.id.mainFrame, fragment).commit()
}

现在在片段中,我希望通知活动关于按钮单击并发送数据。

class WheelFragment : Fragment() {
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
       
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val view: View = inflater.inflate(R.layout.fragment_wheel, container, false)

        val buttonNextWheel1 = view.findViewById<View>(R.id.buttonNextWheel)
        buttonNextWheel1.setOnClickListener {
            Log.d("DTAG", "Send some data here")
        }
        return view
    }
}

标签: android

解决方案


您可以从 Fragment 触发要在 Activity 中执行的功能,如下所示:

 (activity as MainActivity).doSomeThing()

活动

class MainActivity : AppCompatActivity() {
    val TAG = "yourTag"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    
    
    public fun doSomeThing() {
       Log.i(TAG, "doSomeThing: ")
    }
}

分段

class WheelFragment  : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val view: View = inflater.inflate(R.layout.fragment_wheel, container, false)

        val buttonNextWheel1 = view.findViewById<View>(R.id.buttonNextWheel)
        buttonNextWheel1.setOnClickListener {
            Log.d("DTAG", "Send some data here")
            (activity as MainActivity).doSomeThing()
        }
        return view
    }
}

推荐阅读