我有一个包含5个片段的活动(表格)。在我的第3个片段中,我有一个列表视图和一个图像按钮,用于从手机的图库中获取图像并将其放入列表视图中。对于那件事我没有任何疑问。
此外,当我滑动到我的第2和第4个片段并返回到我的第3个片段时,附加的图像停留在第3个片段列表视图中。
但是,当我滑动到第1和第5个片段并返回到我的第3个片段时,我的第3个片段列表视图上的图像附加消失了。可能是什么问题呢?这是我的代码:
Fragment3:
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();
}
}
}
}
ActivityForm:
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;
}
}
}
答案 0 :(得分:2)
View Pager
默认只保留3页左/右/右。
您必须在代码中添加以下行来更改它: -
pager.setOffscreenPageLimit(5); //in your case, you have 5 fragments
答案 1 :(得分:0)
Viepage只缓存3页:当前,左右。如果您的片段从该列表中删除,则稍后将重新创建。使用FragmentStatePagerAdapter,这可以解决您的问题。
答案 2 :(得分:0)
您可以覆盖onSaveInstanceState(Bundle)
并在分发包中保存片段的状态。同样覆盖onViewCreated(View, Bundle)
。它会将您保存的数据保存在捆绑包中,您可以使用它来恢复碎片状态。