Ich verwende ActionBarActivity, um 5 Registerkarten zu erstellen. Ich habe ViewPager verwendet, um zwischen den 5 Tabs mit SectionsPagerAdapter zu wischen, der FragmentPagerAdapter erweitert. Jede Registerkarte enthält ein Fragment mit einer Asyntask, die in der oncreateview-Methode aufgerufen wird. Wenn ich in einem Fragment bin, wird asynctask in einem anderen Fragment aufgerufen.Wie wird AsyncTask in ActionBarActivity-Fragmenten behandelt, wenn ViewPager verwendet wird?
Ich versuchte mit toast Nachrichten in oncreateview Methode ist jedes Fragment anstelle von asynctask. Aber falsche Toastnachrichten werden im falschen Fragment abgefeuert.
onCreate Methodencode:
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager_exp);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position)
{
actionBar.setSelectedNavigationItem(position);
actionBar.setTitle(getHomePageTitle(position));
}
});
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++)
{
// Create a tab with text corresponding to the page title defined by
// the adapter. Also specify this Activity object, which implements
// the TabListener interface, as the callback (listener) for when
// this tab is selected.
actionBar.addTab(actionBar.newTab()
.setIcon(getPagedrawable(i))
.setTabListener(this));
}
// Adapter Klassencode:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position)
{
case 0:
Fragment1 f1 = new Fragment1();
return f1;
case 1:
Fragment2 f2 = new Fragment2();
return f2;
case 2:
Fragment3 f3 = new Fragment3();
return f3;
case 3:
Fragment4 f4 = new Fragment4();
return f4;
case 4:
Fragment5 f5 = new Fragment5();
return f5;
}
return null;
}
@Override
public int getCount() {
// Show 5 total pages.
return 5;
}
}
Fragemnt Klassencode:
public class F1 extends Fragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@SuppressLint("NewApi")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.f1,container, false);
Toast.makeText(getActivity(), "F1", Toast.LENGTH_SHORT).show();
return view;
}
}
Danke dude..dies hat funktioniert – Anirudh
@SomeoneSomewhere die benachbarten Fragmente müssen fortgesetzt werden, damit Sie zwischen ihnen scrollen können. – LordRaydenMK
Ich habe es herausgefunden - der Adapter ist wirklich wichtig: Er muss alle Fragmente instanziieren und einen Verweis darauf behalten. getItem() gibt dann einfach das Objekt zurück. Leider hatte ich mit getItem() jedes Mal ein neues Fragment1, Fragment2, etc. erstellt. Dennoch ist die Verwendung von Fragmenten in einem ViewPager komplizierter - lächerlich. Die aktuelle Implementierung funktioniert wirklich nur für ein paar Fragmente, ansonsten wird die Heap-Nutzung schnell aufgebläht. –