lis*_*aro 3 java android fragment
我需要检测用户何时从我的一个片段中滑入和滑出,我尝试onPause但是当滑动到相邻的屏幕时它似乎没有暂停(当它移动两个sereens时它被破坏).如果可能的话,我想从片段本身做到这一点,因为我正在动态地更改片段,而某些代码只有在存在某个片段时才有用.
是否有可能做到这一点?如何检测滑动"out"(如果可能,从片段本身)?
编辑:
我尝试在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();
}
}
Run Code Online (Sandbox Code Playgroud)
你可以用ViewPager#setOnPageChangeListener()它.
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
...
@Override
public void onPageSelected(int position) {
// do what you want here, for example
if (position != 3) {
...
}
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您希望逻辑在Fragments本身内部,可以采用以下方法: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;
}
});
Run Code Online (Sandbox Code Playgroud)
将adapter.getFragment(position)取决于你使用的存储您的片段任何适配器/结构.