java - 为什么在公共(public)静态类中实例化一个新 fragment

标签 java android android-fragments

引用:Fragment Documentation

我是 Java 和 Android 的新手,正在阅读在线 android 指南。我有两个问题:

问题 1: 为什么需要在 公共(public)静态类?

问题2:“创建新实例”进一步声明了一个新的DetailsFragment。全面的 有四个地方使用了相同的名称“DetailsFragment”。这非常令人困惑。 请解释一下?


public static class DetailsFragment extends Fragment {

    /* Create a new instance of DetailsFragment, initialized
       to show the text at 'index'. */

    public static DetailsFragment newInstance(int index) {
        DetailsFragment f = new DetailsFragment();

        // Supply index input as an argument.
        Bundle args = new Bundle();
        args.putInt("index", index);
        f.setArguments(args);

        return f;
    }
}

最佳答案

这叫做 static factory method pattern ,在这种情况下,您可以轻松创建 fragment 的新实例,并填充所有必需的参数,而无需了解内部实现。例如,如果没有这个,要创建一个正确初始化的 Fragment 实例,您可以使用:

DetailsFragment fragment = new DetailsFragment();
Bundle args = new Bundle();
args.putInt("index", index);
fragment.setArguments(args);
// Then use the fragment however you need it

使用静态工厂方法,所有这些逻辑都内化到 Fragment 本身,您可以简单地使用:

DetailsFragment fragment = DetailsFragment.newInstance(index);
// Then use the fragment

关于java - 为什么在公共(public)静态类中实例化一个新 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26263543/

相关文章:

android - 使用双 SIM 卡设备中的指定 SIM 卡调用电话

android-fragments - 如何处理 FragmentPagerAdapter 重用 Fragments?

java - 在 Java 中使用 XSOM 解析 XSD 架构。如何访问元素和复杂类型

java - 访问实例变量或局部变量

java - 无法使用 Android Studio 在 Java 中打印匹配的 HashMap 键

java - IllegalStateException: <MyFragment> 当前不在 FragmentManager 中

java - android.view.InflateException 膨胀类 fragment 时出错

java - 使用 Thread.sleep 来减慢脚本的缺点?

android - 如何在运行时向 ListView 项添加动态 View ?

android - 是否可以知道 Android 应用程序的来源(例如 Google Play)?