代码之家  ›  专栏  ›  技术社区  ›  Bobby_th

访问其他java类的片段

  •  1
  • Bobby_th  · 技术社区  · 9 年前

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

    我有一个片段,它从用户那里获取一些数据,例如:姓名、职业等。每次我获取数据时,我都想使用GSON将其存储到sharedPreferences。基于搜索,我需要构造一个常规的Java用户类并传递对象( Android - save Object to SharedPreferences and get it anywhere in the app ).

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

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

    3. 如果是1和2,我们应该在哪里添加用户类java文件,与另一个文件夹的片段实现相同的文件,然后将其包括在内?

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

    谢谢

    2 回复  |  直到 8 年前
        1
  •  0
  •   Shamas S    9 年前
    1. 是的,Fragment对象可以实例化另一个类对象。
    2. 是的,它还可以对该对象设置变量和调用函数。
    3. 完全取决于你。如果类很小,并且非常接近片段类,那么可以在片段类中创建它。如果您希望它在其他地方可以访问,或者使它更模块化,您可以使用不同的包名或相同的包名创建它。
        2
  •  0
  •   Raaja SN    9 年前

    嗨,下面是您问题的解决方案和澄清。首先,我想明确Fragment是一个具有生命周期方法的类。所谓生命周期方法,我指的是根据应用程序或活动的生命周期调用方法,比如在前台、可见和后台调用方法。以下是您问题的答案。

    1. 如果您有对类的引用,则可以从类中访问常规方法。

      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. 是的,如果您引用了一个类,Fragment可以实例化一个类并设置变量。

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

      • 如果您没有意识到,通过调用newMyClass()创建对象会占用资源,而且对象创建过程也很耗时。因此,如果在onResume()或onStart()方法中调用它们,那么当片段从可见状态移动到聚焦状态(调用前台-onResume)以及从后台移动到可见状态(调用onStart)时,将创建这些对象。

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

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

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

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

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

    我希望这能帮助你找到解决方案。非常感谢。

    推荐文章