【发布时间】:2017-08-04 19:31:25
【问题描述】:
我已经实现了一个viewpager,它工作正常,但是当使用BACK按钮时它不会关闭,并使用默认的fragent再次加载viewpager,然后如果我再次按下返回按钮它最终完成。当我像 super.onBackPressed(); 一样设置后退按钮时,行为是否相同;或在 viewpager 中逐个片段地取回。希望您能够帮助我。我的代码
Viewpager 活动
public class PerfilSlideActivity extends FragmentActivity {
private static final int NUM_PAGES = 3;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpagerindicator);
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
/*
if (mPager.getCurrentItem() == 0) {
// If the user is currently looking at the first step, allow the system to handle the
// Back button. This calls finish() on this activity and pops the back stack.
} else {
// Otherwise, select the previous step.
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}*/
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Mi_perfil();
case 1:
return new Mi_porfil2();
case 2:
return new Mi_perfil3();
default: return new Mi_perfil();
}
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
我的 xml 幻灯片
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
我用的三个片段之一,其他的都是一样的
public class Mi_perfil extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.mi_perfil, container, false);
return rootView;
}
}
为了完成,我使用 Intent 从其他活动的另一个 Fragment 打开 ViewPager 活动:
public boolean onTouch(View v, MotionEvent event) {
spPerfiles = new SharedPreferenceSurveyTemp(getActivity());
Intent i=new Intent(getActivity(),ScreenSlideActivity.class);
startActivity(i);
return true;
}
【问题讨论】:
-
but when use BACK button it doesn't get closed, and load again the viewpager using the default fragent, then if I press again back buton it finally get finished.你能解释一下吗? -
@mmlooloo 当我在视图寻呼机上按 BACK 时,它会得到完成(),但随后视图寻呼机会自行重新打开,然后如果我尝试使用 BACK 按钮再次完成,则视图寻呼机最终会完成。我想这是因为我在按钮上使用 OnTouchListener 而不是 OnClickListener 只是为了打开 viewpager.. 我修改了我的代码