【问题标题】:Android callback from activity to fragment从活动到片段的Android回调
【发布时间】:2016-02-10 19:44:29
【问题描述】:

我在主要活动中覆盖了“onOptionsItemSelected”方法,当我点击操作栏项目以更改列表中的语言时,我想通知我的列表。如何从 MainActivity.java 回调到我的 ListFragment。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.action_exit) {
        finish();

        return true;
    } else if (id == R.id.action_en) {
        changeLanguageToEn();

        return true;
    } else if (id == R.id.action_ge) {
        changeLanguageToGe();

        return true;
    }

    return super.onOptionsItemSelected(item);
}

【问题讨论】:

    标签: java android android-studio callback


    【解决方案1】:

    假设你的fragment叫做MyListFragment.java,并且有一个叫做changeLanguage()的方法,我通常使用下面的方法来获取当前的fragment:

    FragmentManager fragmentManager = getSupportFragmentManager();
    // (if you're not using the support library)
    // FragmentManager fragmentManager = getFragmentManager();
    for (Fragment fragment : fragmentManager.getFragments()) {
        if (fragment != null && fragment.isVisible() && fragment instanceof MyListFragment) {
            ((MyListFragment) fragment).changeLanguage();
        }
    }
    

    【讨论】:

    • 谢谢我明白了!我不需要回调,我只是调用公共方法来更改语言。
    【解决方案2】:

    在您的ListFragment 中,您可以扩展菜单。

    【讨论】:

      【解决方案3】:

      您可以使用 Activity - Fragment 接口侦听器模式来执行此操作。 android docs

      阅读更多关于它的信息。here 他们正在做与你相反的事情。片段正在回调一个活动,使用相同的模式。

      您也可以使用 FragmentManager 并找到该片段,然后调用其公共方法 您还可以使用 getActivity 进行 TypeCast 并从片段中调用活动方法。 [但是接口模式会很好地解决和解耦你的代码]

      【讨论】:

      • 我试过了。我创建了侦听器接口并在“onAttachFragment”方法上初始化,但我得到空指针异常“尝试在空对象引用上调用接口方法'void thevoid.com.bookapp.MainActivity$OnLanguageSelectedListener.onSelectGe()'”
      • 如果你能把你的代码,我很乐意为你修复它。 edt:哦,nvm,你已经解决了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2013-10-28
      相关资源
      最近更新 更多