用户"刷出"viewpager片段时运行代码?

lis*_*aro 3 java android fragment

我需要检测用户何时从我的一个片段中滑入和滑出,我尝试onPause但是当滑动到相邻的屏幕时它似乎没有暂停(当它移动两个sereens时它被破坏).如果可能的话,我想从片段本身做到这一点,因为我正在动态地更改片段,而某些代码只有在存在某个片段时才有用.

是否有可能做到这一点?如何检测滑动"out"(如果可能,从片段本身)?


编辑:

我尝试在Fragment上使用setUserVisibleHint,这似乎是最好的方法,但它永远不会被调用.我正在使用API​​级别19,我不确定缺少什么:

import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;


public class Contacts extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            View view = inflater.inflate(R.layout.fragment_screen_contacts, container, false);
            return view;
        }


    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        Log.d("MyFragment", "This never shows up.");
        Toast.makeText(getActivity(), "Neither does this", Toast.LENGTH_LONG).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*rio 5

你可以用ViewPager#setOnPageChangeListener()它.

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

        ...

        @Override
        public void onPageSelected(int position) {
            // do what you want here, for example
            if (position != 3) {
                ...
            }
        }

});
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您希望逻辑在Fragments本身内部,可以采用以下方法:onFragmentExited()向您的子类添加方法或其他内容.把逻辑放在那里.然后,在OnPageChangeListener中,调用该方法.例如:

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

     int lastPosition;
     @Override
     public void onPageSelected(int position) {
            MyInterface fragment = (MyInterface)mPagerAdapter.instantiateItem(viewPager, lastPosition);
            if (fragment != null) {
                fragment.onFragmentExited();
            }
            /* If you want to notify the fragment being focused
            fragment = (MiniApp)mPagerAdapter.instantiateItem(viewPager, position);
            if (fragment != null) {
                fragment.onFragmentEntered();
            } */
            lastPosition = position;
     }                      
});
Run Code Online (Sandbox Code Playgroud)

adapter.getFragment(position)取决于你使用的存储您的片段任何适配器/结构.