Alternative für das onResume () während der Fragmentumschaltung

onResume() -Methode wird nicht aufgerufen, wenn wir zwischen Fragmenten mehr als einmal wechseln. Also, gibt es einen besseren Weg, um den Betrieb fortzusetzen?

  • Android Service muss immer laufen (niemals pausieren oder stoppen)
  • Genymotion hat keine IP-Adresse aus der virtuellen Box bekommen
  • Android facebook sdk veröffentlichen feed to user's timeline
  • Umschalten von Fragmenten oder Aktivitäten (dh Layouts) auf Orientierungsänderung
  • Pager als List View Row Item anzeigen
  • ACRA vs Android-Entwickler-Konsole Crash-Fehler Bericht
  • ArrayList indexOf () gibt falschen Index zurück
  • Android - erstellen Sie eine virtuelle Kamera oder überschreiben Sie den echten Cam-Stream? (/ Dev / msm_camera / frame0, v4l2loopback)?
  • FEHLER: Rendering-Probleme Die folgenden Klassen konnten nicht gefunden werden android.support.v7.internal.widget.ActionBarOverlayLayout
  • Android AdapterView?
  • DropBoxManager verwenden Fälle?
  • GridView Zeilen überlappend: Wie kann man die Zeilenhöhe dem höchsten Element anpassen?
  • 6 Solutions collect form web for “Alternative für das onResume () während der Fragmentumschaltung”

    Code folgt:

    Schritt 1

    Schnittstelle erstellen :

     public interface YourFragmentInterface { void fragmentBecameVisible(); } 

    Schritt 2

    Attach Listner In setOnPageChangeListener :

     mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(final int position, final float v, final int i2) { } @Override public void onPageSelected(final int position) { YourFragmentInterface fragment = (YourFragmentInterface) mPagerAdapter.instantiateItem(mViewPager, position); if (fragment != null) { fragment.fragmentBecameVisible(); } } @Override public void onPageScrollStateChanged(final int position) { } }); 

    Schritt 3

    Implementieren Sie die Schnittstelle in Ihrem Fragment :

     public class yourActivity extends SherlockFragment implements YourFragmentInterface{ @Override public void fragmentBecameVisible() { System.out.println("TestFragment"); } } 

    Implementiere diesen listner in all yor fragment activity fragmentBecameVisible() dieser Methodenaufruf bei Fragmentumschaltung.

    Vielen Dank.

    Ich denke, ich habe die Antwort gefunden. Hier ist die Verknüpfung, die auf onResume() des Fragments, das jedes Mal aufgerufen wird, wenn das Fragment sichtbar wird,
    Fragmente onResume von Back Stack

    Sie könnten die Arbeit fortsetzen, indem Sie eine public Methode für jedes fragment bereitstellen, wenn die Seite ausgewählt ist, ich gebe Ihnen ein Beispiel:

     public class MainActivity extends FragmentActivity { private TabHost mTabHost; private ViewPager mViewPager; private TabsAdapter mTabsAdapter; private ArrayList<Fragment> mFragments; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTabHost = (TabHost) findViewById(android.R.id.tabhost); mTabHost.setup(); mViewPager = (ViewPager) findViewById(R.id.pager); mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager); mFragments = new ArrayList<Fragment>(); mFragments.add(new TestFragment1()); mFragments.add(new TestFragment2()); mFragments.add(new TestFragment3()); mTabsAdapter.addTab(mTabHost.newTabSpec("fragment1").setIndicator("fragment1")); mTabsAdapter.addTab(mTabHost.newTabSpec("fragment2").setIndicator("fragment2")); mTabsAdapter.addTab(mTabHost.newTabSpec("fragment3").setIndicator("fragment3")); if (savedInstanceState != null) { mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("tab", mTabHost.getCurrentTabTag()); } private void refreshPage(int i) { Fragment fragment = mFragments.get(i); switch (i) { case 0: ((TestFragment1) fragment).refreshView(); break; case 1: ((TestFragment2) fragment).refreshView(); break; case 2: ((TestFragment3) fragment).refreshView(); break; } } class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener { private final Context mContext; private final TabHost mTabHost; private final ViewPager mViewPager; public TabsAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager) { super(activity.getSupportFragmentManager()); mContext = activity; mTabHost = tabHost; mViewPager = pager; mTabHost.setOnTabChangedListener(this); mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } public void addTab(TabHost.TabSpec tabSpec) { tabSpec.setContent(new DummyTabFactory(mContext)); mTabHost.addTab(tabSpec); notifyDataSetChanged(); } @Override public Fragment getItem(int i) { return mFragments.get(i); } @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { TabWidget widget = mTabHost.getTabWidget(); int oldFocusability = widget.getDescendantFocusability(); widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); mTabHost.setCurrentTab(i); widget.setDescendantFocusability(oldFocusability); refreshPage(i); } @Override public void onPageScrollStateChanged(int i) { } @Override public void onTabChanged(String s) { int postion = mTabHost.getCurrentTab(); mViewPager.setCurrentItem(postion, true); } @Override public int getCount() { return mFragments.size(); } class DummyTabFactory implements TabHost.TabContentFactory { private final Context mContext; public DummyTabFactory(Context context) { mContext = context; } @Override public View createTabContent(String s) { View v = new View(mContext); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } } } 

    Und dann schreibst du dein Fragment so:

     public class TestFragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.main, container, false); } public void refreshView() { //do whatever you want } } 

    Du kannst das versuchen,

    Schritt 1: Überschreiben Sie die Tabselected-Methode in Ihrer Aktivität

     @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { // When the given tab is selected, switch to the corresponding page in // the ViewPager. try { if(MyEventsFragment!=null && tab.getPosition()==3) { MyEvents.fragmentChanged(); } } catch (Exception e) { } mViewPager.setCurrentItem(tab.getPosition()); } 

    Schritt 2: Mit statischen Methode tun, was Sie wollen in Ihrem Fragment,

     public static void fragmentChanged() { Toast.makeText(actvity, "Fragment Changed", Toast.LENGTH_SHORT).show(); } 

    Ich habe dieses Problem mit Fragment Override-Methode gelöst:

      @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { if (getView() != null) { // your code goes here } } } 

    Hinweis: Im Viewpager zuerst Fragment setUserVisibleHint aufgerufen, bevor onCreateView so müssen Sie damit umgehen.

    Handle setUserVisibleHint aufgerufen vor onCreateView in Fragment

    Sie können einfach aufResume () für jedes Fragment simulieren, indem Sie eine Schnittstelle verwenden !!!

    1 – eine Schnittstelle namens FragmentLifecycle erstellen, ist der Code wie folgt:

     public interface FragmentLifecycle { public void onResumeFragment(); } 

    2- Lassen Sie jedes Fragment die Schnittstelle implementieren:

     public class FragmentOne extends Fragment implements FragmentLifecycle 

    3- Implementierung von Schnittstellenmethoden in jedem Fragment:

     @Override public void onResumeFragment() { Log.i(TAG, "onResumeFragment()"); Toast.makeText(getActivity(), "onResumeFragment():" + TAG,Toast.LENGTH_SHORT).show(); } 

    4- Anrufschnittstellenmethoden auf ViewPager Seitenänderung:

     viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { FragmentLifecycle fragmentToShow = (FragmentLifecycle)adapter.getItem(position); fragmentToShow.onResumeFragment(); } }); 

    Genießen!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.