【问题标题】:viewpager not working correctly in lollipop 5.0 when I use other fragments当我使用其他片段时,viewpager 在棒棒糖 5.0 中无法正常工作
【发布时间】:2015-04-25 09:01:07
【问题描述】:

这个问题只出现在棒棒糖中。 kitkat 和以前的版本可以正常工作!

问题是我已经使用网页浏览实现了一个滑块,在第一个片段中我有一个带有两个按钮的登录片段。

当应用启动时没有问题,但是当我使用页面视图更改片段并返回登录片段时,按钮不起作用。

按钮在同一个片段中加载注册表单或登录表单。 没有错误,只是按钮什么都不做。

这是代码:

public class ScreenSlideActivity extends ActionBarActivity {
    /**
     * The number of pages (wizard steps) to show in this demo.
     */
    private static final int NUM_PAGES = 5;

    /**
     * The pager widget, which handles animation and allows swiping horizontally to access previous
     * and next wizard steps.
     */
    private ViewPager mPager;

    /**
     * The pager adapter, which provides the pages to the view pager widget.
     */
    private PagerAdapter mPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_screen_slide);

        // Instantiate a ViewPager and a PagerAdapter.
        /*postponeEnterTransition();
        mPager.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

            public boolean onPreDraw() {
                mPager.getViewTreeObserver().removeOnPreDrawListener(this);
                startPostponedEnterTransition();
                return true;
            }
        });*/
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.setPageTransformer(true, new DepthPageTransformer());
        LinePageIndicator indicator = (LinePageIndicator) findViewById(R.id.indicator);
        indicator.setViewPager(mPager);
    }

    @Override
    public void onBackPressed() {
        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.
            super.onBackPressed();
        } else {
            // Otherwise, select the previous step.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }

    /**
     * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
     * sequence.
     */
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch(position)
            {
                case 0:
                    return new LoginSignupFragment();
                default:
                    return new SlidePageFragment();
            }
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }
    }

}

加载登录表单或注册表单的第一个片段代码是:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(
            R.layout.fragment_slide_login, container, false);

    ingresarBtn = (Button) rootView.findViewById(R.id.ingresarBtn);
    ingresarBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fragment frag = new LoginFragment();
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.slide_login_content, frag);
            transaction.addToBackStack(null);
            transaction.commit();
        }
    });
    unirseBtn = (Button) rootView.findViewById(R.id.unirseBtn);
    unirseBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fragment frag = new SignupFragment();
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.slide_login_content, frag);
            transaction.addToBackStack(null);
            transaction.commit();
        }
    });
    return rootView;
 }

如果需要更多信息,我会提供。

【问题讨论】:

    标签: android android-fragments android-viewpager android-5.0-lollipop


    【解决方案1】:

    我的 ViewPager 遇到了同样的问题。我google了很多,但没有找到任何解决方案。然后我记得在我的应用程序清单中设置了android:hardwareAccelerated="false"

    从清单中删除 android:hardwareAccelerated="false" 行就可以了。清单中的这一行似乎会导致 ViewPager 中使用的按钮和文本视图无法正常用于 android lollipop。

    因此,如果您的清单中有 android:hardwareAccelerated="false",请尝试将其删除。或者您也可以尝试为特定的<activity><application> 标签设置android:hardwareAccelerated="true"

    正如这里提到的https://stackoverflow.com/a/10339406/3090861,该属性将在旧版本的 Android 上被忽略。

    您可以在http://android-developers.blogspot.in/2011/03/android-30-hardware-acceleration.html 找到有关硬件加速的更多信息。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 2015-04-01
      • 2017-06-24
      相关资源
      最近更新 更多