我正在使用RowsSupportFragment
和VerticalGridSupportFragment
,并且我希望能够在选择一行中的某个项目时按下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);
}
}