当我使用其他片段时,viewpager在棒棒糖5.0中无法正常工作

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

问题是我使用了一个页面视图实现了一个滑块,在第一个片段中我有两个按钮的登录片段。

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

按钮将registry单或登录表单加载到同一个片段中。 没有错误,只有按钮什么都不做。

这是代码:

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; } } } 

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

 @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; } 

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

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

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

因此,如果你的清单中有android:hardwareAccelerated="false" ,请尝试删除它。 或者您也可以尝试为特定的标记设置android:hardwareAccelerated="true"

如前所述https://stackoverflow.com/a/10339406/3090861 ,旧版Android将忽略该属性。

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

希望它能帮到你!