问题描述
我正在使用 Leanback 架构开发一个应用程序,其中使用遥控器的 dpad 不关注某个自定义视图。
自定义视图的 onFocus() 在 FireStick 版本 3(Android API 28) 中不会被调用。
在较低版本上触发相同的代码( 自定义视图是一个 ListRow,用于显示由 GenrePresenter 提供数据的电影类型。 但是 HeaderItem 获得了焦点。 相同的代码适用于 远程触控板用于选择其他视图 编辑流派Presenter监听器代码 以及我如何调用监听器genrePresenter = new GenrePresenter(new GenrePresenter.viewListener() {
@Override
public void onClick(View view,String selected) {
((HomeFYCActivity) getActivity()).showAdapter(viewmodel.genreList,selected);
}
//THIS DOES NOT GET TRIGGERED ON API 28
@Override
public void onFocus(View view,Boolean hasFocus) {
// NEED TO SET FOCUS HERE
}
},"ALL GENRES");
header = new HeaderItem("Now PLAYING");
genreRow = new ListRow(header,genreRowAdapter);
public interface viewListener {
void onClick(View view,String selected);
void onFocus(View view,Boolean hasFocus);
}
((ShowCard) viewHolder).tvGenre.setonFocuschangelistener(new View.OnFocuschangelistener() {
@Override
public void onFocusChange(View v,boolean hasFocus) {
viewListener.onFocus(v,hasFocus);
}
});
解决方法
嗨,经过几天的严格试验和错误,我发现我的 XML 的父 LinearLayout 必须设置为
android:clickable="false"
android:focusable="false"
以及在我的情况下位于父级内部的元素,必须将 textview 定义为
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
我希望这个答案可以节省您的时间。
阿门