【问题标题】:Set listener in fragment after pressing back button on activity在活动上按下后退按钮后在片段中设置监听器
【发布时间】:2020-10-14 08:52:53
【问题描述】:

所以我有 MyFragment 从我开始 MyActivity 按钮点击。一旦我在活动中,我想回到我的片段,我想宣布我刚刚来自那个活动的片段并显示一个横幅。

这是我的活动:

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? 过去 2 天我一直在寻找解决方案,但没有找到任何可行的方法。

【问题讨论】:

    标签: android kotlin listener


    【解决方案1】:

    这不是处理这种情况的好方法。一个好的方法可以如下:

    从您的片段开始活动以获取结果

    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()
    }
    

    【讨论】:

      【解决方案2】:

      你不需要任何接口,使用startActivityForResult方法而不是startActivityHERE中的一些文档和示例

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多