Android 碎片保存状态

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

我有一个包含5个片段的活动(表单)。在我的第三个片段中,我有一个列表视图和一个图像按钮,可以从手机的多媒体资料中获取图像并将其放入列表视图。我对此没有异议

另外,当我滑动到我的第二个和第四个片段并返回到我的第三个片段时,附加的图像将保留在第三个片段列表视图中

但当我滑动到第1和第5个片段并返回到第3个片段时,附加在第3个片段列表视图上的图像就消失了。有什么问题吗?这是我的密码:

片段3:

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。谢谢。它现在正在保存我的片段状态:)