Java 从片段类调用Web服务(API)的正确方法
我需要知道,在哪一个片段回调方法中,我们应该调用一个web服务,在返回到片段后web服务不应该再次调用 比如说。 我有一个片段类MyFragment.javaJava 从片段类调用Web服务(API)的正确方法,java,android,web-services,android-fragments,android-fragmentactivity,Java,Android,Web Services,Android Fragments,Android Fragmentactivity,我需要知道,在哪一个片段回调方法中,我们应该调用一个web服务,在返回到片段后web服务不应该再次调用 比如说。 我有一个片段类MyFragment.java public class MyFragment extends Fragment { @Override public void onAttach(Activity activity) { super.onAttach(activity); } @Override publi
public class MyFragment extends Fragment {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_layout, container,
false);
return rootView;
}
}
我需要知道我必须调用哪个回调方法来更新fragment的UI现在我正在从
onCreateView
方法调用web服务。但我需要知道从片段调用web服务的最佳方式。如果我正确理解了您的问题,您希望从服务器获取一些数据,然后通知片段数据已准备好并重新绘制片段,对吗?根据文件:
onCreate()-
系统在创建片段时调用此函数。在您的实现中,您应该初始化片段的基本组件,当片段暂停或停止时,您希望保留这些组件,然后继续
onCreateView()
当片段第一次绘制其用户界面时,系统调用此函数。要为片段绘制UI,必须从该方法返回一个视图,该视图是片段布局的根。如果片段不提供UI,则可以返回null
当您在应用程序中的其他地方创建片段时,将调用onCreate()
方法。当必须第一次绘制片段时,将调用onCreateView(),该方法返回一个已创建的视图。在您的情况下,您可能会选择以下内容:
onCreate
中,初始化所有数据(空容器),初始化适配器,然后执行AsyncTask
onCreateView
中,准备视图以返回-适配器等。因此,一旦AsyncTask
完成,它将在onPostExecute
中调用您的适配器。notifyDataSetChanged()
。这将重新绘制片段,因为适配器将被告知数据已更改(从服务器获取)取决于您希望何时获取数据。 每次应用程序出现在前台时,您都想要它吗? 使用onResume() 您是否只想在应用程序首次启动时使用它? 使用onViewCreated(),它在onCreateView完成后被调用。onCreate()很棘手。 在onCreate()方法中只调用一次要调用的所有内容。 例如,API调用、列表、适配器初始化 所以理想情况下我会这样做
currentFragment = FirstFragment.getInstance();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragmentHolder, currentFragment, "FIRST_KEY")
.addToBackStack("FIRST_KEY")
.commit();
currentFragment = getSupportFragmentManager().findFragmentByTag("FIRST_KEY");
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragmentHolder, currentFragment, "FIRST_KEY")
.addToBackStack("FIRST_KEY")
.commit();
棘手的部分
但是如果您确实希望onCreate()
被调用一次,那么重用片段。(不要每次都创建新实例)
如何重用片段?
当第一次添加时,使用如下键将其添加到backbackback
currentFragment = FirstFragment.getInstance();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragmentHolder, currentFragment, "FIRST_KEY")
.addToBackStack("FIRST_KEY")
.commit();
currentFragment = getSupportFragmentManager().findFragmentByTag("FIRST_KEY");
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragmentHolder, currentFragment, "FIRST_KEY")
.addToBackStack("FIRST_KEY")
.commit();
当您想再次添加它时,使用如下键获取旧实例
currentFragment = FirstFragment.getInstance();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragmentHolder, currentFragment, "FIRST_KEY")
.addToBackStack("FIRST_KEY")
.commit();
currentFragment = getSupportFragmentManager().findFragmentByTag("FIRST_KEY");
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragmentHolder, currentFragment, "FIRST_KEY")
.addToBackStack("FIRST_KEY")
.commit();
演示项目:
下面是一个演示项目的链接,该项目使用Volley库加载图像列表。它有一个类似的实现
使用底部导航,所有片段都将重新创建。在我的例子中,我只需要调用API一次。如何通过您的方法实现这一点?