因此,我有MyFragment,从单击按钮开始MySactivity。一旦我参加了活动,我想回到我的片段,我想宣布我刚刚从该活动中获得的片段,并显示一条横幅。
这是我的活动:
class MyActivity : AppCompatActivity() {
private var onBackButtonClickListener: OnBackButtonClickListener? = null
...
backBtn.setOnClickListener {
this.onBackPressed()
onBackButtonClickListener?.onBackButtonClick()
}
...
fun setOnBackButtonClick(onBackButtonClickListener: OnBackButtonClickListener) {
this.onBackButtonClickListener = onBackButtonClickListener
}
interface OnBackButtonClickListener {
fun onBackButtonClick()
}
}
以下是我实现活动接口的片段:
public class MyFragment extends Fragment implements MyActivity.OnBackButtonClickListener {
....
@Override
public void onBackButtonClick() {
//show banner
}
我的问题是:我的碎片如何知道我只是来自那个特定的活动?我在片段中的哪里设置onClickListener?在过去的两天里,我一直在寻找解决方案,但没有找到任何有效的解决方案。
这不是处理这种情况的好方法。一个好的方法可以如下:
从您的片段开始活动以获取结果
startActivityForResult(intent, REQUEST_CODE)
并覆盖片段中的onActivityResult()
。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(resultCode == AppCompatActivity.RESULT_OK && requestCode == REQUEST_CODE) {
showBanner() // <---- show banner or do your task here
}
super.onActivityResult(requestCode, resultCode, data)
}
这将在您结束活动返回时被调用。
关于您的活动
backBtn.setOnClickListener {
setResult(AppCompatActivity.RESULT_OK)
this.onBackPressed()
}
您不需要任何接口,使用startActivityForResult
方法而不仅仅是startActivity
,HERE 中的一些文档和样本