我的应用程序目前有一个导航抽屉,里面有一些碎片。最初加载的默认片段是从服务器下载图像(位图)的配置文件页面。
当我导航到另一个片段并返回到Profile片段时,该片段将被重新创建,并且图像必须从服务器上重新下载。
有没有办法保存Profile Fragment的状态,这样我就不必一直向服务器发送重新下载映像的请求。目前,由于需要进行重复的下载请求,UI感觉非常笨重。
以下是启动相关片段的"活动"的代码摘录。
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch(position+1) {
case 1:
Bundle LoginDetails = getIntent().getExtras();
String [] login_info = LoginDetails.getStringArray("login_details");
String username = login_info[0];
String password = login_info[1];
fragment = new Profile().newInstance(position + 1, username, password);
break;
case 2:
fragment = new Search().newInstance(position+1);
break;
case 3:
fragment = new NewsFeed().newInstance(position+1);
break;
default:
Log.w(this.getClass().getSimpleName(), "Reached default on Navigation Drawer select item");
break;
}
//fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
if (fragment != null) {
FragmentTransaction fragmentManager = getFragmentManager().beginTransaction();
fragmentManager.replace(R.id.container, fragment);
fragmentManager.addToBackStack(null);
fragmentManager.commit();
}
else {
Log.e("Activity", "Error Creating fragment");
}
}
我的Profile.java文件(Fragment)随后在onCreateView中使用AsyncTask调用来下载配置文件映像。我应该在其他地方进行这个调用,还是有其他方法来保持碎片布局的状态?
最好的方法是在本地缓存您的图像,您可以手动进行,也可以使用一些漂亮的库,如Picasso或Ion,然后当您的片段被重新创建时,您将从缓存中获得该图像。
但是,如果您不想使用它,还有另一种方法可以存储图像:您可以将加载图像的AsyncTask
移动到使用NavigationDrawer
的Activity
,然后执行AsyncTask
,例如,在onCreate
中,将图像存储在活动中,当您将当前片段替换为ProfileFragment
时,将图像作为参数传递给newInstance
方法。然后,图像将被存储以供您的NavigationDrawerActivity
生命周期使用。