2016-01-21 161 views
1

我一直在搜索互联网,但无法获得我需要的正确答案。我是Android新手,请提供详细的答案。访问其他java类的片段

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

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

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

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

我只是提供了一个用户为例,一般,但我想答案知道1个2

感谢

回答

0
  1. 是Fragment对象可以实例化另一个类的对象。
  2. 是的,它也可以在该对象上设置变量和调用函数。
  3. 完全由你决定。如果该类很小并且非常局部于片段类,则可以在Fragment类中创建该类。如果您希望可以在其他地方访问它,或者使其更加模块化,则可以使用不同的软件包名称或相同的名称来创建它。
+0

是否有可能提供一个示例或链接显示它?我想知道应该放置哪些Java类,以及它应该如何包含?我可以只添加一个包并添加这些类并对该路径执行导入? –

+0

如果您使用Android Studio,这应该是非常微不足道的。只需右键单击片段类所在的文件夹,即可创建新的Java类,并将其命名。现在回到你的Fragment类中,如果你尝试编写代码,实例化新创建的类,它会提示自动导入。 :) 您可以在与Android Studio捆绑的几乎所有Android教程中看到这一点。 –

+0

感谢您的帮助! –

0

嗨,下面是你的问题的解决方案和澄清。首先我想清楚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. 是一个片段实例化一个类和设置变量,如果你有一个参考。

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

    • 如果您不知道,通过调用new MyClass()创建一个对象会占用资源,并且对象创建过程也很耗时。因此,如果在onResume()或onStart()方法中调用它们,那么当片段从可见状态转移到焦点时(前台调用onResume())并从后台调用可见(onStart()被调用)时,将创建这些对象状态。

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

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

    • 此外,如果你想调用上述方法实例化的类的方法,你可以从onCreate()之下的任何生命周期方法调用它,就像onStart()一样(如果你想在用户使用之前显示结果你的片段)或onResume()(如果你想在用户看到它后显示结果),这是你自己做的。

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

    • 最后,这里是一个链接,可以详细了解片段的生命周期方法。 Learn About Fragment LifeCycle

我希望这有助于你找到一个解决方案。谢谢。