我一直在网上搜索,但无法得到我需要的正确答案。我是Android新手,所以请提供详细的解答。
我有一个片段从用户那里获取一些数据,例如:名称,职业等。每次我获取数据时,我都希望使用GSON将其存储到sharedPreferences。根据搜索,我将需要构建一个常规Java用户类并传递对象(Android - save Object to SharedPreferences and get it anywhere in the app)。
所以我的问题是,Fragments可以访问其他常规的java类函数吗?
class UserFragment extends Fragment {
// get the data from editText
User newUser = new User("Tom");
newUser.setOccupation("Programmer");
//etc
}
Fragment可以实例化一个类并设置变量吗?
我刚刚提供了一个用户作为例子,但一般来说我想知道1和2的答案。
谢谢
答案 0 :(得分:0)
答案 1 :(得分:0)
以下是您的问题的解决方案和说明。首先,我想清楚Fragment是一个带有生命周期方法的类。通过生命周期方法,我的意思是根据应用程序或活动生命周期调用方法,例如在前景,可见和背景中。以下是您的问题的答案。
如果您引用了一个方法,则可以从类中访问常规方法。
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;
}
}
是的,Fragment可以实例化一个类并设置变量,如果你有一个变量。
现在好了主要部分。您可以从生命周期方法中的任何位置调用方法并实例化类。但我建议在onCreate()方法或其上面的任何生命周期方法中实例化一个对象,如onAttach()。这是因为2分以下。
如果您不知道,通过调用new MyClass()创建对象会占用资源,而且对象创建过程也很耗时。因此,如果在onResume()或onStart()方法中调用它们,那么当片段从可见状态移动到聚焦(前景 - 调用onResume())并从背景到可见(调用onStart())时,将创建这些对象。
当另一个应用程序进入焦点时(这会导致片段在应用程序进入前台时调用onResume()或onStart())或者当应用程序从后台移动到可见状态时(onStart()),会发生这种情况叫做)。因此,每次发生这种情况时都会创建对象。
但另一方面,如果您在onCreate()或其上方的生命周期方法中创建它,则只有在销毁并重新创建片段时才会创建对象。
此外,如果你想从你通过上面方法实例化的类中调用方法,你可以从onCreate()下面的任何生命周期方法中调用它,就像在onStart()中一样(如果你想在用户之前显示结果)使用你的片段)或onResume()(如果你想在用户看到后显示结果),你可以这样做。
同样在上面的例子中,我从onStart()调用了retrieveData()方法,并且我从生命周期方法之外编写了该方法。这只是一个例子。你可以这样做。但是你必须根据你的需要在生命周期方法中调用这些方法。
最后,这里有一个链接,可以了解有关Fragment生命周期方法的更多信息。 Learn About Fragment LifeCycle
我希望这有助于您找到解决方案。谢谢。