문제 설명
일부 장치 Android에서 ViewPager가 작동하지 않음 (ViewPager not working on some devices Android)
한 활동을 다른 활동으로 스와이프하기 위해 ViewPager 및 Tabpageradapter를 사용하고 있지만 Android 4.0 버전 아래에서 예외를 찾을 수 없습니다.
MainActivity****:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initilization Viewpager in main activity
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
context = this.getApplicationContext();
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.blackbox));
actionBar.setStackedBackgroundDrawable(getResources().getDrawable(
R.drawable.blackbox));
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
TabsPagerAdapter.class :
//Class using for tabs
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
// Top Rated fragment activity that is the first activity to open
return new PunjabiFragment();
case 1:
// Games fragment activity(Second activity to open
return new HindiFragment();
case 2:
// Movies fragment activity(third activity to open
return new EnglishFragment();
}
return null;
}
@Override
public int getCount() {
// get item count ‑ equal to number of tabs
return 3;
}
AndroidManifest.xml
6<uses‑sdk
android:minSdkVersion="7"
android:targetSdkVersion="23" />
logcat에서 이 오류가 발생함:
66666966666참조 솔루션
방법 1:
Are you using <android.support.v4.view.ViewPager />
instead of <ViewPager />
in your xml file?
방법 2:
You might want to have a look at this and this. Min version for ViewPager is 4.0. For compatibility you can use the library in the link. The second link gives you the compatibility library.
방법 3:
Besides Sohaib's answer, pointing that you should use the compatibility library, if you are loading content from a web service, you may need to extend from FragmentStatePagerAdapter
. I had some similar problem before and just changing the base PagerAdapter fixed the issue.
방법 4:
Carefully look at your onCreate
method.
In my case I was checking for some permissions and using return;
if the permission is not granted.
That is why I could not run my app on the marshmallow, but could run my app on the lower versions.
(by Neha、Octaviano Putra、Sohaib、Tomás Ruiz‑López、Sultan Ali)