【问题标题】:Calling function from an ListFragment from the MainActivity when the Fragment isn't being used不使用 Fragment 时从 MainActivity 调用 ListFragment 函数
【发布时间】:2012-10-04 19:37:06
【问题描述】:

我不确定这个标题是否有意义,很难解释我想要什么,但我会试一试。

我必须分段,ListFragment 和 MyFragment。如果设备是纵向的,即两个片段不能一起显示在屏幕上,则只显示 LisFragment。我有一个名为 MyActivity 的活动,它托管片段并显示相关设备方向的相关片段。

然后,用户可以按下按钮以使用 startActivityForResult 执行搜索,然后调用 MyActivity 中的函数以实际执行所需的操作。

如果手机处于横向状态,即两个片段都可见,则它成功地从 PasswordList 片段中调用该函数。但是,如果手机是纵向的,则 ListFragment 为空,因此不会调用该函数。下面是我遇到问题的代码

public void performSearch(ArrayList<Spanned> passwords) {
    PasswordList passwordList = (PasswordList)getFragmentManager().findFragmentById(R.id.passwordListFragment);
    passwordList.performingSearch = true;
    passwordList.performSearch(passwords);
}

PasswordList 就是我上面说的 ListFragment,当手机处于横向时 passwordList 工作,我可以执行 performSearch 功能。如果手机是纵向的,即使 ListFragment 正在显示,它也会返回 Null,因此无法执行 performSearch。

如何以任何一种方式执行 performSearch 功能。感谢您的任何帮助,您可以提供。

【问题讨论】:

    标签: android android-fragments android-activity android-listfragment


    【解决方案1】:

    自从我做 Android 以来已经有一段时间了,但我相信由于片段实际上没有显示,在你的情况下,它现在不存在。我相信每次切换方向时,都会重新绘制视图等。

    这个函数在另一个片段中,无论如何你可以将它提取到另一个类中吗?在我之前的一个 android 项目中,我使用了两个片段,但对于手机/小型设备,我只是将它转发到托管第二个片段的 FragmentActivity(我使用了兼容库)。在表格版本中,第二个片段被显示。

    它不是超级优雅,而且有些陈旧,但我的项目是开源的,如果你想看看,请访问 www.github.com/zerkz。

    【讨论】:

    • 我可能会将该函数移至一个新类,但该函数会修改用户界面的控件。虽然我可以使用 PasswordList passwordList = new PasswordList(); 访问控件然后 passwordList.performSearch() 但这会创建一个新实例,因此该函数中的任何控件都不会修改实际显示的 UI 控件
    • 你在使用 setRetainInstance() 吗?我在另一个相关问题的答案中看到了这一点。
    • 我不是没有,没听说过
    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    相关资源
    最近更新 更多