2012-11-07 9 views
1

내 앱에서 발생하는 문제가 아니며 자체 지원 라이브러리에있는 것 같으므로 버그가 어디에 있는지 이해할 수 없습니다.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; 
} 
} 

어떤 아이디어?

+0

응용 프로그램 실행 OS ... –

+1

는 이제 코드를 검토 할 수 있습니다 :) 완료를 ViewPager – LuxuryMode

+0

을 사용하고있는 코드를 볼 수 있습니다 – Steve

답변