片段访问其他 java class

Fragment accessing other java class

我一直在网上搜索,但找不到我需要的正确答案。我是Android的新手,所以请提供详细的答案。

我有一个片段,它从用户那里获取一些数据,例如:姓名、职业等。每次我获取数据时,我都想使用 GSON 将其存储到 sharedPreferences。根据搜索结果,我需要构造一个常规 Java 用户 class 并传递对象 ()。

  1. 所以我的问题是,片段可以访问其他常规 java class 函数吗?

    class UserFragment extends Fragment {
    
    // get the data from editText
    
    User newUser = new User("Tom");
    newUser.setOccupation("Programmer");
    
    //etc
    
    }
    
  2. Fragment可以实例化一个class并设置变量吗?

  3. 如果 1 和 2 是,我们在哪里添加用户 class java 文件,与另一个文件夹的片段实现相同的文件,然后包含它?

我只是提供了一个用户作为示例,但一般来说我想知道 1 和 2 的答案。

谢谢

  1. 是的,片段对象可以实例化另一个 class 对象。
  2. 是的,它还可以在该对象上设置变量和调用函数。
  3. 完全取决于您。如果 class 很小并且非常局限于片段 class,您可以在片段 class 中创建它。如果您希望它可以在其他地方访问,或者使其更加模块化,您可以使用不同的包名或相同的包名创建它。

您好,以下是针对您的问题的解决方案和说明。首先,我想明确 Fragment 是一个带有生命周期方法的 class。通过生命周期方法,我的意思是根据应用程序或 activity 生命周期调用这些方法,就像它在前台、可见和后台时一样。以下是您问题的答案。

  1. 如果您有一个引用,您可以从 class 访问常规方法。

    public class YourFragment extends Fragment {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyClass class = new MyClass();
    }
    
    @Override
    public void onStart() {
        super.onStart();
        String data = retrieveData();
    }
    String retrieveData() {
        return data;
    }
    }
    
  2. 是的,一个片段可以实例化一个 class 并设置变量,如果你有一个引用的话。

  3. 好的,现在是主要部分。您可以从生命周期方法内的任何位置调用方法并实例化 class。但我建议在 onCreate() 方法或其上方的任何生命周期方法(如 onAttach())中实例化一个对象。这是因为以下2点。

    • 不知不觉,调用new MyClass()创建对象会占用资源,而且创建对象的过程也很耗时。因此,如果您在 onResume() 或 onStart() 方法中调用它们,则当片段从可见状态移动到聚焦状态(前景 - 调用 onResume() )以及从背景移动到可见状态(调用 onStart() )时,将创建这些对象.

    • 当另一个应用程序进入焦点时(这会导致片段在您的应用程序进入前台时调用 onResume() 或 onStart())或当我们的应用程序从后台移动到可见状态时,经常会发生这种情况(调用 onStart())。所以每次发生这种情况都会创建对象。

    • 但另一方面,如果您在 onCreate() 或上面的生命周期方法中创建它,则只有当片段被销毁并重新创建时才会创建对象。

    • 此外,如果你想从 class 中调用你已经通过上述方法实例化的方法,你可以从 onCreate() 下面的任何生命周期方法中调用它,就像在 onStart() 中一样(如果你想在用户使用你的片段之前显示结果)或在 onResume() 中(如果你想在用户看到它之后显示结果)这取决于你。

    • 另外,在我上面的示例中,我从 onStart() 调用了 retrieveData() 方法,并且我从生命周期方法之外编写了该方法。这只是一个例子。你可以那样做。但是您必须根据需要在生命周期方法中调用这些方法。

    • 最后这里有一个link来了解更多关于Fragment的生命周期方法。 Learn About Fragment LifeCycle

我希望这能帮助您找到解决方案。谢谢。