java - 当 viewpager fragment 的用户 "swipes out"时运行代码?

标签 java android fragment

我需要检测用户何时从我的一个 fragment 中滑入和滑出,我试过 onPause 但似乎应用程序在滑到相邻屏幕时没有暂停(当将两个 sereens 移离它时它被破坏)。如果可能的话,我想从 fragment 本身开始,因为我正在动态更改 fragment ,并且我的一些代码只有在存在特定 fragment 时才有用。

这有可能吗?我怎样才能检测到滑动“出”(如果可能的话从 fragment 本身)?


编辑:

我尝试在 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();
    }
}

最佳答案

您可以使用 ViewPager#setOnPageChangeListener()为此。

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

        ...

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

});

编辑:

如果您希望逻辑位于 Fragment 本身内部,可以采用以下一种方法:向您的子类添加一个方法 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;
     }                      
});

adapter.getFragment(position) 取决于您用来存储 fragment 的任何适配器/结构。

关于java - 当 viewpager fragment 的用户 "swipes out"时运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22184406/

相关文章:

使用 Hibernate API 的 Java 字符串日期验证

java - 在 jLabel 上调整图像大小

android - Eclipse 不会启动 Android 模拟器,也不会安装应用程序

android - 棉花糖应用权限撤销通知?

在 FragmentPagerAdapter 中存储为数组的 Android Fragments 在离开并返回应用程序后未刷新

Android Pay - 以编程方式单击 "Buy Now"按钮

java - 在创建 XMLGregorianCalendar 时使用 DataTypeFactory 严重影响性能

javascript - 如何修复谷歌地图上的标记并移动 map ?

java - 随机获取org.json.JSONException : Value <!类型为java.lang.String的DOCTYPE无法转换为JSONObject的错误

android - 检测屏幕中的 fragment