0

我想要檢測當我使用ViewPager設置的三個片段的特定片段進入屏幕時。我在viewpager 3個片段,並建立了與當片段尋呼機適配器的片段進入屏幕時,哪個生命週期回調被調用?

mViewPager.setOffscreenPageLimit(2); 

的viewpager因此所有三個片段在一次構造(因爲它在每一側上存儲2)。我檢查了Fragment.onResume()被調用一次,而不是每個片段到達前臺時。是否有另一個回調來確保我可以捕捉到該事件併發送一些分析信號?

感謝

回答

1

可以使用ViewPager.setOnPageChangeListener()設置ViewPager.OnPageChangeListener()

根據它在PagerAdapter中的位置使用所選頁面的偵聽器。

這裏是我的示例應用程序:

package net.ynotapps.testviewpagerfragment; 

import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.widget.Toast; 

import butterknife.ButterKnife; 
import butterknife.InjectView; 


public class MainActivity extends ActionBarActivity { 


    @InjectView(R.id.pager) 
    ViewPager pager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ButterKnife.inject(this); 

     CustomPagerAdapter adapter = new CustomPagerAdapter(getSupportFragmentManager()); 
     pager.setAdapter(adapter); 
     pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 

       // Put Code here // 

       // Example code // 
       if (position == 2) { 
        Toast.makeText(MainActivity.this, "Found Position 2 fragment", Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
    } 


    public static class CustomPagerAdapter extends FragmentPagerAdapter { 

     public CustomPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      CustomFragment fragment = new CustomFragment(); 
      Bundle bundle = new Bundle(); 
      bundle.putString("display_text", String.format("Fragment %d is here.", position)); 
      fragment.setArguments(bundle); 
      return fragment; 
     } 

     @Override 
     public int getCount() { 
      return 5; 
     } 
    } 

    public static class CustomFragment extends Fragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
      TextView tv = new TextView(getActivity()); 
      tv.setText(getArguments().getString("display_text")); 
      return tv; 
     } 
    } 
} 
相關問題