Okay, i have fixed all my problems by all.
If someone is struggling with dynamic fragment transactions don't forget to programatically add your fragment in your activity just like.
FragmentTransaction ftransc=getSupportFragmentManager().beginTransaction();
Autogidas myautogidas=new Autogidas();
Pagrindinis pagr = new Pagrindinis();
ftransc.add(viewPager.getId(), myautogidas, "FirstFragment");
ftransc.commit();
I don't know actually why, because my whole app was working like a charm, but you just need to do it.
Even when your fragments are added, you might actually want to update data in your fragment when, for example, you ASyncTask finishes. It's easy to do it!
I have found a simple method and put it in my Fragment:
public void refreshData(ArrayList<Car> data) {
viewPager = MainActivity.getAppPager();
Log.d("start", "refresh");
TabsPagerAdapter sk = new TabsPagerAdapter(getFragmentManager());
viewPager.setAdapter(sk);
cars = new ArrayList<Car>(data);
StringBuffer c = new StringBuffer();
for (Car car : cars) {
c.append(car + "\n");
}
tv.setText(c.toString());
viewPager.getAdapter().notifyDataSetChanged();
}
and called it from my ASyncTask:
MySQLiteHelper db = new MySQLiteHelper(MainActivity.getAppContext());
ArrayList<Car> refreshedArray = db.newCars("agidas");
Autogidas gidas = (Autogidas) getFragmentManager()
.findFragmentByTag("FirstFragment");
if (gidas != null) {
gidas.refreshData(refreshedArray);
Log.d("Fragment", "found");
}
I was struggling with notifyDataSetChanged(); - you have to call it everytime you want to inform your pager that fragment should be updated. But it isn't that easy.
First of all override your getItemPosition like that - (its really not efficient, but does its job)
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
even after that calling notifydatasetchanged(); won't do anything.
1.You have to get your viewPager from your Acitivty:
public static ViewPager getAppPager() {
return viewPager;
}
and from there just check my refreshData() method.
I think i don't have to pass whole arrayList, as I am getting it right from database, and onpostexecute is just used as a trigger to update my fragment.
Thats it!:)