2016-11-30 4 views
0

У меня есть recycleview, который содержит более 10 элементов внутри. Поскольку он содержит более 10 элементов, он отображает только 4 элемента одновременно. Проблема возникает с TalkBack, я хочу перебирать список с помощью перетаскивания влево/вправо, но после 4. фокус предмета переходит к другим компонентам представления в макете. Как я могу перебирать все элементы recycleview с помощью Talkback?Android итерации Скрытые элементы RecycleView с TalkBack

Edit: Я использую свой собственный делегат доступности, как это:

mRecyclerView.setAccessibilityDelegate(mAccessibilityDelegate); 


public class AccessibilityDelegate extends View.AccessibilityDelegate { 

private Assistant mAssistant; 

public AccessibilityDelegate(Assistant assistant) 
{ 
    mAssistant = assistant; 
} 

@Override 
public void sendAccessibilityEvent(View host, int eventType) { 
    if(!mAssistant.isSpeaking() && mAssistant.isRecognizerAvailable()) 
    { 
     super.sendAccessibilityEvent(host, eventType); 
    } 
} 

@Override 
public boolean performAccessibilityAction(View host, int action, Bundle args) { 
    if(!mAssistant.isSpeaking() && mAssistant.isRecognizerAvailable()) 
    { 
     return super.performAccessibilityAction(host, action, args); 
    } 

    return false; 
} 

@Override 
public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) { 
    super.sendAccessibilityEventUnchecked(host, event); 
} 

@Override 
public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event) { 
    return super.dispatchPopulateAccessibilityEvent(host, event); 
} 

@Override 
public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) { 
    super.onPopulateAccessibilityEvent(host, event); 
} 

@Override 
public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { 
    super.onInitializeAccessibilityEvent(host, event); 
} 

@Override 
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { 
    super.onInitializeAccessibilityNodeInfo(host, info); 
} 

@Override 
public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) { 
    return super.onRequestSendAccessibilityEvent(host, child, event); 
} 

@Override 
public AccessibilityNodeProvider getAccessibilityNodeProvider(View host) { 
    return super.getAccessibilityNodeProvider(host); 
} 

}

+0

ли вам по ошибке своей очереди пообщаться? и пытается выйти из этого. или сделать какое-то приложение для работы? –

+1

Нет, я хочу разработать приложение с функциями accessiblity. – dnkilic

ответ

0

После нескольких испытаний я нашел проблему.

Для переопределения функций доступности RecycleView расширяет RecyclerViewAccessibilityDelegate.

//mRecyclerView.setAccessibilityDelegate(mAccessibilityDelegate); 
    RVAccessibilityDelegate rvAccessibilityDelegate = new RVAccessibilityDelegate(mRecyclerView, mAssistant); 
    mRecyclerView.setAccessibilityDelegateCompat(rvAccessibilityDelegate); 

Кроме того, если вы хотите отключить извещения, как «показывает пункт-6» просто закомментируйте super.sendAccessibilityEventUnchecked (хозяин событие)

public class RVAccessibilityDelegate extends RecyclerViewAccessibilityDelegate { 

private Assistant mAssistant; 

public RVAccessibilityDelegate(RecyclerView recyclerView, Assistant assistant) { 
    super(recyclerView); 
    mAssistant = assistant; 
} 

@Override 
public boolean performAccessibilityAction(View host, int action, Bundle args) { 
    if(!mAssistant.isSpeaking() && mAssistant.isRecognizerAvailable()) 
    { 
     return super.performAccessibilityAction(host, action, args); 
    } 

    return false; 
} 

@Override 
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { 
    super.onInitializeAccessibilityNodeInfo(host, info); 
} 

@Override 
public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { 
    super.onInitializeAccessibilityEvent(host, event); 
} 

@Override 
public void sendAccessibilityEvent(View host, int eventType) { 
    if(!mAssistant.isSpeaking() && mAssistant.isRecognizerAvailable()) 
    { 
     super.sendAccessibilityEvent(host, eventType); 
    } 
} 

@Override 
public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) { 
    //super.sendAccessibilityEventUnchecked(host, event); 
} 

@Override 
public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event) { 
    return super.dispatchPopulateAccessibilityEvent(host, event); 
} 

@Override 
public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) { 
    super.onPopulateAccessibilityEvent(host, event); 
} 

@Override 
public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) { 
    return super.onRequestSendAccessibilityEvent(host, child, event); 
} 

@Override 
public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View host) { 
    return super.getAccessibilityNodeProvider(host); 
} 

}

+0

Что такое класс Ассистента, от доступности? – Baba

+0

Нет, это просто пользовательский класс. У вас проблемы с этим решением? – dnkilic

+0

У меня такое же требование, но я не знаю, когда помощник закончил говорить. Не могли бы вы проверить это - http://stackoverflow.com/questions/42782169/is-there-any-callback-or-anything-any-parameter-in-event-or-nodeinfo-to-know-a – Baba

Смежные вопросы