Как мога да деактивирам всички събития на докосване на всички деца на ViewGroup?

Имам контейнер FrameLayout, съдържащ много неща (включително ScrollView, WebView, ViewPager...).

Бих искал да мога да задействам събитието onClick на този контейнер, но изглежда, че някои от ScrollView, WebView и ViewPager прихващат събитието за докосване, тъй като събитието onClick се задейства само когато щракна върху частите на контейнера, които не го правят имаш някоя от тях...

Как мога да деактивирам всички събития на докосване на децата на контейнера, за да мога да задействам onClick навсякъде в него?

АКТУАЛИЗАЦИЯ

Идеята е да има нещо като диспечера на задачите в Android 3.2, т.е. където текущият видим екран на приложението се показва като намалена икона, върху която може да се щракне.

Благодаря


person jul    schedule 23.04.2012    source източник


Отговори (2)


Може би съм разбрал нещо погрешно, но предполагам, че отговорът на въпроса ви е много прост: Ако не искате да изпращате нито едно от събитията за докосване на децата - така че просто трябва да замените ViewGroup.onInterceptTouchEvent (MotionEvent ev) API справка като тази:

public boolean onInterceptTouchEvent (MotionEvent ev){
    return true;
}

Според документацията на android това означава, че вашата ViewGroup винаги ще прихваща всички събития на докосване и няма да ги изпраща на децата. Всички те ще бъдат насочени към метода ViewGroup.onTouchEvent(MotionEvent ev) на вашата ViewGroup.

person rus1f1kat0R    schedule 19.10.2012

Можете да ги деактивирате по следния начин:

FrameLayout parent = (FrameLayout)findViewById(some_id);
disableChildsOnTouch(parent)


public void disableChildsOnTouch(ViewGroup viewGroup){
    int cnt = viewGroup.getChildCount();
    for (int i = 0; i < cnt; i++){
        View v = viewGroup.getChildAt(i);
        if (v instanceof ViewGroup){
            disableChildsOnTouch((ViewGroup)v);
        } else {
            v.setOnTouchListener(null);
            v.setOnClickListener(null);
            //v.SETYOURLISTENER(null)
        }
    }
}
person Rafael T    schedule 23.04.2012
comment
ScrollView все още превърта и контейнерът onClick все още не се задейства при деактивиране на всички деца... :( - person jul; 23.04.2012
comment
не трябва ли scrollView да превърта? Ако не, можете да тествате View v по-горе дали е scrollView и да деактивирате превъртането там. Не мога да ви кажа повече с толкова малко информация. Бихте могли поне да публикувате вашия XML, за да видя какъв може да е проблемът - person Rafael T; 23.04.2012
comment
Актуализирах въпроса си с това защо искам да направя това. Не мисля, че е необходима повече информация: просто искам да мога да задействам събитието onClick в група изгледи, съдържащи изгледи като scrollview, viewpager... - person jul; 23.04.2012