运行code,当用户QUOT;刷卡出"的viewpager片段? [英] Run code when user "swipes out" of viewpager fragment?

查看:193
本文介绍了运行code,当用户QUOT;刷卡出"的viewpager片段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要当用户从我的片段中的一个进出挥笔检测,我试过的onPause,但它似乎滑动到相邻的屏幕(从两份sereens远离移动时,它的破坏)时,应用程序没有被暂停。如果可能的话我想从片段本身做到这一点,因为我在动态变化的片段,我如果某一个片段是present一些code只会是有用的。

是否有可能做到这一点?我怎么可以检测刷出(如果可能的话片段本身)?


编辑:

我尝试使用上这似乎是做到这一点的最佳途径片段setUserVisibleHint,但是它永远不会被调用。我使用的API级别19,我不知道缺少了什么:

 进口android.app.Fragment;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.Toast;
公共类扩展联系人片段{
        @覆盖
        公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
            super.onCreate(savedInstanceState);
            查看查看= inflater.inflate(R.layout.fragment_screen_contacts,集装箱,FALSE);
            返回视图。
        }
    @覆盖
    公共无效setUserVisibleHint(布尔isVisibleToUser){
        super.setUserVisibleHint(isVisibleToUser);
        Log.d(MyFragment,这从来没有出现了。);
        Toast.makeText(getActivity(),无论做这个,Toast.LENGTH_LONG).show();
    }
}


解决方案

您可以使用<一个href=\"http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOnPageChangeListener%28android.support.v4.view.ViewPager.OnPageChangeListener%29\"相对=nofollow> ViewPager#setOnPageChangeListener() 这一点。

  viewPager.setOnPageChangeListener(新OnPageChangeListener(){        ...        @覆盖
        公共无效使用onPageSelected(INT位置){
            //你想要的这里,例如
            如果(位置!= 3){
                ...
            }
        }});

编辑:

如果你想要的逻辑是自己片段里面,这里是做到这一点的一种方法:一种方法 onFragmentExited()或东西添加到您的子类。把逻辑在那里。然后,OnPageChangeListener内,调用该方法。例如:

  viewPager.setOnPageChangeListener(新OnPageChangeListener(){     INT lastPosition;
     @覆盖
     公共无效使用onPageSelected(INT位置){
            MyInterface的片段=(MyInterface的)mPagerAdapter.instantiateItem(viewPager,lastPosition);
            如果(片段!= NULL){
                fragment.onFragmentExited();
            }
            / *如果您要通知该片段被聚焦
            片段=(MiniApp)mPagerAdapter.instantiateItem(viewPager,位置);
            如果(片段!= NULL){
                fragment.onFragmentEntered();
            } * /
            lastPosition =位置;
     }
});

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

I need to detect when the user swipes in and out from one of my fragments, I tried onPause but it seems the app isn't paused when swiping to the adjacent screen (it's destroyed when moving two sereens away from it). If possible I want to do it from the fragment itself since I'm changing fragments dynamically and I some code will only be useful if a certain fragment is present.

Is it possible to do this? How can I detect the swipe "out" (if possible from the fragment itself)?


EDIT:

I tried using setUserVisibleHint on a Fragment which seems like the best way to do this, however it never gets called. I'm using API level 19, I'm not sure what's missing:

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();
    }
}

解决方案

You can use ViewPager#setOnPageChangeListener() for this.

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

        ...

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

});

Edit:

If you want the logic to be inside the Fragments themselves, here's one way to do it: add a method onFragmentExited() or something to your subclass. Put the logic in there. Then, inside the OnPageChangeListener, call that method. For example:

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;
     }                      
});

The adapter.getFragment(position) depends whatever adapter/structure you're using to store your fragments.

这篇关于运行code,当用户QUOT;刷卡出&QUOT;的viewpager片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆