【问题标题】:ViewPager doesn't finish when back button is pressed, it loads again按下后退按钮时 ViewPager 没有完成,它会再次加载
【发布时间】: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.. 我修改了我的代码

标签: android android-viewpager


【解决方案1】:

你应该把finish放在:

Intent i=new Intent(getActivity(),ScreenSlideActivity.class);
startActivity(i);
finish();

如果这不起作用,请尝试使用 FragmentTransaction / FragmentManager 传递片段。

【讨论】:

  • 谢谢,但如果我使用finish(),它会完成最后一个活动,我想“完成”从这个活动中打开的viewpager 活动。 ty
  • 是的,那么你将不得不处理 fragmenttransaction / fragmentmanager
  • 它不工作,因为我不想完成()第一个活动,只是第二个,viewpager。
【解决方案2】:

问题是试图使用OnTouchListener 在片段中打开一个新活动。这不是正确的方法,并且导致我的活动被多次打开。

我通过实现 OnClickListener 来解决此问题:

public boolean onClick(View v) {
    Intent i=new Intent(getActivity(),ScreenSlideActivity.class);
    startActivity(i);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多