내 앱에서 발생하는 문제가 아니며 자체 지원 라이브러리에있는 것 같으므로 버그가 어디에 있는지 이해할 수 없습니다.viewpager.draw의 Android java null null
방금이 버그는 안드로이드 2.1 업데이트 1 및 때로는 안드로이드 2.2 froyo가있는 오래된 장치에서만 발생한다는 것을 알았습니다. 내 장치에서 안드로이드 2.3 이상 전혀 문제가 없습니다. 나는이 문제를 재현 할 수 없다. 심지어이 문제를 일으키는 전화기의 동일한 사양으로 구성된 에뮬레이터를 가지고있는 장치를 가지고 재현 할 수도 없다.
나는 문제를 찾지 않고 하루 종일 보았다.
java.lang.NullPointerException
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1366)
at android.view.View.draw(View.java:6743)
at android.support.v4.view.ViewPager.draw(SourceFile:1923)
at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
at android.view.View.draw(View.java:6743)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
at android.view.View.draw(View.java:6743)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1843)
at android.view.ViewRoot.draw(ViewRoot.java:1407)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1163)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
at dalvik.system.NativeStart.main(Native Method)
그리고 주요 활동에서 onCreate
의 코드 선형 레이아웃 호출기는 사용자가 무엇인지보기 호출기 번호를 나타내는 점에 불과 세트입니다. 채우기 호출기는 ViewPager의 getcount 의해 자궁강 viewpagers 수에 점이 낮은 화면을 작성하는 것이다())
PageListener를 전환 페이지와 viewpager과 다른 색상
하여 해당 도트 칠 때 확인 그냥pager = (LinearLayout) findViewById(R.id.pager); appViewPager = (ViewPager) findViewById(R.id.AppViewPager); adapter = new MyPagerAdapter(this, appsList); appViewPager.setAdapter(adapter); populatePager(); PageListener pageListener = new PageListener(); appViewPager.setOnPageChangeListener(pageListener);
그리고 MyPagerAdapter 코드 :
public class MyPagerAdapter extends PagerAdapter implements OnCancelListener {
private Context ctx = null;
public ArrayList<App> appsList;
public MyPagerAdapter(Context ctx, ArrayList<App> appsList) {
this.ctx = ctx;
this.appsList = appsList;
}
@Override
public int getCount() {
int listsize = appsList.size();
int numOfAppsPerPage = Integer.valueOf(ctx.getResources().getString(R.string.grid_number_of_apps_per_page));
float num = Float.valueOf(listsize)/Float.valueOf(numOfAppsPerPage);
float rest = num % 1;
int numOfPagers = Math.round(num - rest);
if (rest > 0 || numOfPagers == 0) {
numOfPagers = numOfPagers + 1;
}
return numOfPagers;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.grid, null);
GridView gridview = (GridView) view.findViewById(R.id.gridview);
int starterPosition;
int numOfAppsPerPage = Integer.valueOf(ctx.getResources().getString(R.string.grid_number_of_apps_per_page));
starterPosition = numOfAppsPerPage * position;
int enderPosition = starterPosition + numOfAppsPerPage;
// Log.e("ViewPagerPosition", "Position:" + position);
int appsListSize = appsList.size();
if (enderPosition > appsListSize) {
enderPosition = appsListSize;
}
ArrayList<App> shorterList = new ArrayList<App>(appsList.subList(
starterPosition, enderPosition));
final AppLauncherAdapter grid = new AppLauncherAdapter(ctx, shorterList);
gridview.setAdapter(grid);
((ViewPager) collection).addView(gridview, 0);
return gridview;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
}
어떤 아이디어?
응용 프로그램 실행 OS ... –
는 이제 코드를 검토 할 수 있습니다 :) 완료를 ViewPager – LuxuryMode
을 사용하고있는 코드를 볼 수 있습니다 – Steve