Reputation: 827
I have an Activity(Form) with 5 fragments. In my 3rd fragment i have a listview and an image button to get the images from my phone's gallery and put it in the listview. I have no problem with that.
Also, the images attached is staying there in the 3rd fragments listview when I swipe to my 2nd and 4th fragment and go back to my 3rd fragment.
But when i swipe to 1st and 5th fragment and go back to my 3rd fragment, the image attach on my 3rd fragment listview is gone. What could be the problem? Here's my code:
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;
}
}
}
Upvotes: 0
Views: 312
Reputation: 5486
View Pager
only cache 3 pages left/current/right by default.
you have to change it by adding following line in your code :-
pager.setOffscreenPageLimit(5); //in your case, you have 5 fragments
Upvotes: 2
Reputation: 1102
You can override onSaveInstanceState(Bundle)
and save the state of your fragment in the bundle. Also override onViewCreated(View, Bundle)
. It will have your saved data in the bundle, which you can use to restore your fragments state.
Upvotes: 0
Reputation: 2563
Viepagers only cache 3 pages: current, left and right. If your fragment falls off that list it will be recreated later. Use a FragmentStatePagerAdapter, this should fix your problems.
Upvotes: 0