Android 碎片保存状态
我有一个包含5个片段的活动(表单)。在我的第三个片段中,我有一个列表视图和一个图像按钮,可以从手机的多媒体资料中获取图像并将其放入列表视图。我对此没有异议 另外,当我滑动到我的第二个和第四个片段并返回到我的第三个片段时,附加的图像将保留在第三个片段列表视图中 但当我滑动到第1和第5个片段并返回到第3个片段时,附加在第3个片段列表视图上的图像就消失了。有什么问题吗?这是我的密码: 片段3:Android 碎片保存状态,android,listview,android-listview,android-fragments,Android,Listview,Android Listview,Android Fragments,我有一个包含5个片段的活动(表单)。在我的第三个片段中,我有一个列表视图和一个图像按钮,可以从手机的多媒体资料中获取图像并将其放入列表视图。我对此没有异议 另外,当我滑动到我的第二个和第四个片段并返回到我的第三个片段时,附加的图像将保留在第三个片段列表视图中 但当我滑动到第1和第5个片段并返回到第3个片段时,附加在第3个片段列表视图上的图像就消失了。有什么问题吗?这是我的密码: 片段3: public class Fragment3 extends Fragment implements OnC
public class Fragment3 extends Fragment implements OnClickListener {
ListView lv;
ArrayList<Uri> array_list = new ArrayList<Uri>();
ArrayAdapter<Uri> array_adapter;
final int RQS_LOADIMAGE = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frag3, container, false);
ImageButton b = (ImageButton) v.findViewById(R.id.button_ai);
b.setOnClickListener(this);
array_adapter = new ArrayAdapter<Uri>(getActivity(), android.R.layout.simple_list_item_1, array_list);
lv = (ListView) v.findViewById(R.id.list_ai);
lv.setAdapter(array_adapter);
return v;
}
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RQS_LOADIMAGE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RQS_LOADIMAGE) {
if(resultCode == Form.RESULT_OK) {
Uri imageUri = data.getData();
array_list.add(imageUri);
array_adapter.notifyDataSetChanged();
}
}
}
}
public class Form extends FragmentActivity {
ViewPager viewPager = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form);
viewPager = (ViewPager) findViewById(R.id.pager);
FragmentManager fragmentManager = getSupportFragmentManager();
viewPager.setAdapter(new MyAdapter(fragmentManager));
}
public class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter (FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = null;
if (i == 0)
{
fragment = new Fragment1();
}
if (i == 1)
{
fragment = new Fragment2();
}
if (i == 2)
{
fragment = new Fragment3();
}
if (i == 3)
{
fragment = new Fragment4();
}
if (i == 4)
{
fragment = new Fragment5();
}
return fragment;
}
@Override
public int getCount() {
return 5;
}
}
}
Viepagers仅缓存3页:当前页、左侧页和右侧页。如果您的片段从该列表中脱落,它将在以后重新创建。使用a,这将解决您的问题。您可以覆盖
onSaveInstanceState(Bundle)
并将片段的状态保存在Bundle中。还覆盖已创建的视图(视图、捆绑)。它会将您保存的数据保存在捆绑包中,您可以使用该捆绑包恢复片段状态。查看寻呼机
默认情况下只缓存左/当前/右3页
您必须通过在代码中添加以下行来更改它:-
pager.setOffscreenPageLimit(5); //in your case, you have 5 fragments
我想,代码没有问题。但您需要在backbackback中添加片段,以便在backpress中获得片段。就是这个例子。活动代码可能会帮助我们告诉您该怎么做。对不起。我现在发布了我的活动代码。我现在发布了我的活动代码。我正在活动中使用FragmentStatePagerAdapter。谢谢。它现在正在保存我的片段状态:)