从活动到片段

时间:2016-02-10 19:44:29

标签: java android android-studio callback

我有" 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);
}

3 个答案:

答案 0 :(得分:2)

假设您的片段被称为MyListFragment.java并且有一个名为changeLanguage()的方法,我通常使用以下方法来获取当前片段:

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

答案 1 :(得分:0)

ListFragment内,您可以为菜单充气。

答案 2 :(得分:0)

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

阅读更多相关内容。here他们正在做与你相反的事情。片段是使用相同的模式回调活动。

你也可以使用FragmentManager找到所述片段,然后调用它的公共方法 你也可以使用getActivity TypeCast和来自fragment的调用活动方法。 [但接口模式可以很好地解决和解耦你的代码]