寻找一种处理行/网格中关键事件的好方法

时间:2019-03-27 13:05:02

标签: android android-tv leanback

我正在使用RowsSupportFragmentVerticalGridSupportFragment,并且我希望能够在选择一行中的某个项目时按下RCU上的不同按钮时触发特定操作。一种解决方案是处理活动中的关键事件,并由活动委托处理关键事件。这就导致了滴滴向下的体系结构,当一个具有多个片段等复杂的层次结构时,维护它会变得非常耗时。我希望能够尽可能地处理关键事件,以使其与实际与之交互的对象尽可能接近。我曾尝试让行适配器实现View.onKeyListener,但我无法使其工作。以前有没有其他人为此提供解决方案?

以下是我不想想要做的事情的一个示例:

MainActivity

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.SOME_KEYCODE:
            mFragment.doSomething();
            return true;
    }
    return super.onKeyUp(keyCode, event);
}

MainFragment

public void doSomething() {
    if (mChildFragment instanceof SomeFragment) {
        ((SomeFragment) mChildFragment).doSomething();
    } else if (mChildFragment instanceof SomeOtherFragment) {
        // etc.
    }
}

子片段

public void doSomething() {
    mGrandChildFragment.doSomething();
}

大子片段(RowsSupportFragment)

public void doSomething() {
    Object o = getRowViewHolder(getSelectedPosition()).getSelectedItem();
    if (o instanceof SomeItem) {
        SomeItem someItem = (SomeItem) o;
        SomeUtil.doSomething(someItem);
    }
}

0 个答案:

没有答案