运行code,当用户QUOT;刷卡出"的viewpager片段? [英] Run code when user "swipes out" of viewpager fragment?
问题描述
我需要当用户从我的片段中的一个进出挥笔检测,我试过的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屋!