Как настроить подсказку об использовании TalkBack для элементов в RecyclerView?
Я пытаюсь сделать мое приложение пригодным для слепых людей. При касании дочернего элемента в RecyclerView он выделяется, тогда как при двойном касании он открывает категории дочернего элемента. В основном нужно дважды нажать, чтобы выполнить действие щелчка. Я хочу, чтобы об этом говорил TalkBack через советы по использованию. Пробовал с помощью [RecyclerViewAccessibilityDelegate] [1]
[1]: https://developer.android.com/reference/android/support/v7/widget/RecyclerViewAccessibilityDelegate, но безрезультатно. Я успешно настроил советы по использованию для отдельного ImageButton, но сделал что-то не так, когда дело доходит до RecyclerView.
Вот мой MainActivity.java
public class MainActivity extends AppCompatActivity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_levelx_layout);
..
..
initializeLayoutViews();
initializeViewListeners();
...
}
private void initializeLayoutViews()
{
...
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
mRecyclerView.setAdapter(new MainActivityAdapter(this));
mRecyclerView.setVerticalScrollBarEnabled(true);
mRecyclerView.setScrollbarFadingEnabled(false);
mRecyclerView.requestFocus();
}
private void initializeViewListeners()
{
initRecyclerViewListeners();
}
private void initRecyclerViewListeners() {
mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(this, mRecyclerView, new RecyclerTouchListener.ClickListener()
{
@Override
public void onClick(final View view, final int position)
{
ViewCompat.setAccessibilityDelegate(mRecyclerView, new TalkbackHints_RecyclerView(mRecyclerView));
LinearLayout menuItemLinearLayout = view.findViewById(R.id.linearlayout_icon1);
menuItemLinearLayout.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
tappedCategoryItemEvent(view, v, position);
}
});
}
@Override
public void onLongClick(View view, int position) {
}
}));
mRecyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener()
{
@Override
public void onChildViewAttachedToWindow(View view)
{
mRecyclerItemsViewList.set(mRecyclerView.getChildLayoutPosition(view), view);
if (mRecyclerItemsViewList.contains(view) && mSelectedItemAdapterPos > -1 &&
mRecyclerView.getChildLayoutPosition(view) == mSelectedItemAdapterPos)
setMenuImageBorder(view, true);
}
@Override
public void onChildViewDetachedFromWindow(View view) {
setMenuImageBorder(view, false);
mRecyclerItemsViewList.set(mRecyclerView.getChildLayoutPosition(view), null);
}
});
}}
И TalkBackHints_RecyclerView.java:
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerViewAccessibilityDelegate;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
public class TalkbackHints_RecyclerView extends RecyclerViewAccessibilityDelegate
{
public TalkbackHints_RecyclerView(RecyclerView recyclerView) {
super(recyclerView);
}
@Override
public void onInitializeAccessibilityNodeInfo(View host,
AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
//RecyclerViewAccessibilityDelegate.ItemDelegate();
AccessibilityNodeInfoCompat.AccessibilityActionCompat intoCategory = new
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
AccessibilityNodeInfo.ACTION_CLICK, "select. Double tap again to " +
"enter this category");
info.addAction(intoCategory);
}
}
Пожалуйста, скажите мне, где я иду не так.