当我使用其他片段时,viewpager 在棒棒糖 5.0 中无法正常工作
viewpager not working correctly in lollipop 5.0 when I use other fragments
这个问题只出现在棒棒糖中。 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;
}
如果需要更多信息,我会提供。
我的 ViewPager 也有同样的问题。我用谷歌搜索了很多但没有找到任何解决方案。然后我记得在我的应用程序清单中设置 android:hardwareAccelerated="false"
。
从清单中删除 android:hardwareAccelerated="false"
行就成功了。清单中的这一行似乎导致 ViewPager 中使用的按钮和文本视图无法为 android 棒棒糖正常运行。
因此,如果您的清单中有 android:hardwareAccelerated="false"
,请尝试将其删除。或者您也可以尝试为特定 <activity>
或 <application>
标签设置 android:hardwareAccelerated="true"
。
如此处所述 该属性将在旧版本 Android 上被忽略。
您可以在 http://android-developers.blogspot.in/2011/03/android-30-hardware-acceleration.html 找到更多关于硬件加速的信息。
希望对您有所帮助!
这个问题只出现在棒棒糖中。 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;
}
如果需要更多信息,我会提供。
我的 ViewPager 也有同样的问题。我用谷歌搜索了很多但没有找到任何解决方案。然后我记得在我的应用程序清单中设置 android:hardwareAccelerated="false"
。
从清单中删除 android:hardwareAccelerated="false"
行就成功了。清单中的这一行似乎导致 ViewPager 中使用的按钮和文本视图无法为 android 棒棒糖正常运行。
因此,如果您的清单中有 android:hardwareAccelerated="false"
,请尝试将其删除。或者您也可以尝试为特定 <activity>
或 <application>
标签设置 android:hardwareAccelerated="true"
。
如此处所述 该属性将在旧版本 Android 上被忽略。
您可以在 http://android-developers.blogspot.in/2011/03/android-30-hardware-acceleration.html 找到更多关于硬件加速的信息。
希望对您有所帮助!