【问题标题】:Share a fragment with several classes?与多个类共享一个片段?
【发布时间】:2012-05-20 12:36:33
【问题描述】:

我想知道如何才能最好地创建进度条片段。当然,它必须可供所有其他班级使用。

目前我只有一个 ProgressBarFragment,它有公共的 setVisible 方法。通过 FragmentManager 获取 Fragment 我可以将其设置为可见或不可见。但这是执行此类操作的正确方法吗?

public class MyActivity exetends FragmentActivity {
    void setVisibility(int visible) {
        ProgressBarFragment fragment = (ProgressBarFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_progress_bar);
        fragment.setProgressBar(visible);
    }
}

当然,我还有其他几个片段也使用此代码来触发进度条。

public class ProgressBarFragment extends Fragment {
    public void setProgressBar(int visible) {
        progressBar = (ProgressBar) getActivity().findViewById(R.id.progress_bar);
        progressBar.setVisibility(visible);
    }
}

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    您可以将此代码重构为 ProgressBarFragment 的静态方法

    class ProgressBarFragment {
        //...
        static void setVisibility(Activity parent, int visible) {
               ProgressBarFragment progressBar =
                       (ProgressBarFragment)parent.getSupportFragmentManager()
                       .findFragmentById(R.id.fragment_progress_bar);
        progressBar.setProgressBar(visible);
        //...
    }
    

    那么你将在任何地方使用ProgressBarFragment.setVisibility(yourActivity, 1)

    【讨论】:

    • 好吧,虽然我不喜欢静态类或方法,但这似乎是一个相当不错的解决方案。
    • @membersound 静态 fields 会导致 Android 中的内存泄漏,因为它们可以永久保留不需要的引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2018-07-02
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多