我需要检测用户何时从我的片段之一滑入和滑出,我尝试了 onPause 但似乎应用程序在滑到相邻屏幕时没有暂停(当将两个屏幕移开时它会被破坏)。如果可能的话,我想从片段本身执行此操作,因为我正在动态更改片段,并且某些代码仅在存在某个片段时才有用。
是否有可能做到这一点?如何检测“向外”滑动(如果可能从片段本身)?
EDIT:
我尝试在片段上使用 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() http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOnPageChangeListener%28android.support.v4.view.ViewPager.OnPageChangeListener%29为了这。
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
...
@Override
public void onPageSelected(int position) {
// do what you want here, for example
if (position != 3) {
...
}
}
});
Edit:
如果您希望逻辑位于片段本身内部,可以采用以下一种方法:添加一个方法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;
}
});
The adapter.getFragment(position)
取决于您用来存储片段的适配器/结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)