在父Activity onBackPressed方法中调用Fragment接口方法

Posted

技术标签:

【中文标题】在父Activity onBackPressed方法中调用Fragment接口方法【英文标题】:Calling Fragment interface method in parent Activity onBackPressed method 【发布时间】:2016-11-27 04:24:42 【问题描述】:

我有一个扩展 AppCompatActivity 的 Activity。而且在这个活动中,我有一个 ViewPager 像这样填充:

private void setupViewPager(ViewPager viewPager) 
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new Tab1(), "Tab1");
        adapter.addFragment(new Tab2(), "Tab2");
        adapter.addFragment(new Tab3(), "Tab3");
        viewPager.setAdapter(adapter);
    

在我的选项卡片段中,我有一个 RecyclerView,它使用一些库实现了多项选择。 我想通过按下硬件后退按钮来实现选择模式的关闭。

我的 Fragment 中有这个函数:

public void closeSelectMode() 
        if(mMultiSelector.isSelectable())
            setSelection(mMultiSelector);
       super.onBackPressed();
    

但是我不知道怎么把这个函数放在父Activity onBackPressed()中。

我也尝试使用 Fragment 接口来实现这一点,但我不知道如何将接口函数的实现放在 onBackPressed 函数中到父 Activity。

【问题讨论】:

【参考方案1】:

您可以通过这种方式覆盖 Activity 的 onBackPressed:

@Override
public void onBackPressed() 
    Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_name);
    if (fragment instanceof YourFragment) 
        YourFragment yourFragment = (YourFragment) fragment;
        yourFragment.closeSelectMode();
     else 
        super.onBackPressed();
    

【讨论】:

哇,谢谢!它很酷!但不是 Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_name);我使用 fragment = adapter.getItem(0);

以上是关于在父Activity onBackPressed方法中调用Fragment接口方法的主要内容,如果未能解决你的问题,请参考以下文章

android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法

如何为Android Fragments(Tabs Activity)实现onBackPressed

onBackPressed() 使用

安卓中onBackPressed ()方法的使用

Android 重写onBackPressed()方法 不执行问题

膨胀视图和返回键 android 或 onBackPressed()