2012-06-29 1 views
3

В одном из моих приложений для Android я использую собственную галерею, чтобы показывать изображения в галерее. (я использую пользовательские галереи для того, чтобы показать 1 пункт время при замене галереи)Null pointer Исключение: GestureDetector.onTouchEvent для пользовательской галереи в android для ICS 4.0

Вот код, который я использую для пользовательских галереи:

public class CustomGallery extends Gallery { 

    public CustomGallery(Context context) { 
      super(context); 
     } 

     public CustomGallery(Context context, AttributeSet attrs) { 
      super(context, attrs); 
     } 

     public CustomGallery(Context context, AttributeSet attrs, int defStyle) { 
      super(context, attrs, defStyle); 
     } 

    private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) { 
     return e2.getX() > e1.getX(); 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     int kEvent; 
     if (isScrollingLeft(e1, e2)) { // Check if scrolling left 
      kEvent = KeyEvent.KEYCODE_DPAD_LEFT; 
     } else { // Otherwise scrolling right 
      kEvent = KeyEvent.KEYCODE_DPAD_RIGHT; 
     } 
     onKeyDown(kEvent, null); 
     return true; 

    } 
} 

Приведенный выше код работает отлично 2,2 , 2.3 и т. Д., Но его сбой в ICS 4.0, вызывающий нулевой указатель Исключение GestureDetector.onTouchEvent.

Пожалуйста, помогите.

Спасибо заранее.

+2

Я только что заметил, что проблема была не в том, что ... пользовательской галереи или всего этого ..... Проблема связана с хостом вкладки .... когда я пытаюсь запустить actvity, используя метод StartActvity(), он не сработает, но когда я запускаю activity как дочерний элемент текущей активности. на вкладке host .. произойдут сбои .... Может ли кто-нибудь есть идея soome на этом, поскольку я должен должен начать это как ребенок не как singleActvity .... вот мой код: ** Intent i = new Intent (A.this, A_Detail.class); \t \t \t \t TabGroupActivity parent = (TabGroupActivity) getParent(); \t \t \t (parent) .startChildActivity (PLAT_PAGE_ID, i); ** –

ответ

0

У меня была такая же проблема только происходит на ICS4.0 - мой GalleryView было открытие Activity внутри TabHost, когда пользователь щелкает элемент на Gallery - это всегда дает NullPointerException, но только на ICS4 - я в конечном итоге делает после чего сделал трюк:

//flag returned by onTouch event always false except when we are about to start activity 
boolean flag = false; 
//add a touch listener 
myGallery.setOnTouchListener(new OnTouchListener() { 
@Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return flag; 
    } 
}); 

myGallery.setOnItemClickListener(new OnItemClickListener() { 
    //handle clicks 

    //set flag returned by touch listener to true 
    flag = true; 

    //now add logic to open up the activity 
} 

Исключением теперь стал ICS4.

0

У меня была такая же спорадическая проблема. Два параметра MotionEvent, которые передаются методу переопределения onFling, иногда являются нулевыми, а вызов e2.getX() вызывает исключение. Вы можете исправить это, запустив свой метод onFling следующим образом:

if (e1 == null || e2 == null) return false;