访问其他java类的片段

时间:2016-01-21 06:04:17

标签: java android class android-fragments communication

我一直在网上搜索,但无法得到我需要的正确答案。我是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文件,与另一个文件夹的片段实现相同的文件然后包含它?
  4. 我刚刚提供了一个用户作为例子,但一般来说我想知道1和2的答案。

    谢谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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. 是的,Fragment可以实例化一个类并设置变量,如果你有一个变量。

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

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

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

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

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

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

    • 最后,这里有一个链接,可以了解有关Fragment生命周期方法的更多信息。 Learn About Fragment LifeCycle

  4. 我希望这有助于您找到解决方案。谢谢。