我需要检测用户何时从我的一个 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/