在我的消防電視應用程序中,我使用recyclerview
和horizontal layout
。RecyclerView物品失去焦點
使用dpad工作和項目滾動越來越關注。
但是當我按住按鈕時,它會非常快速地滾動,因爲許多keydown事件被觸發,並且項目正在失去焦點,並且無法再滾動,因爲我的recyclerview上方的另一個Textview
正在獲得焦點。
它看起來像一個錯誤。有沒有解決方法?
在我的消防電視應用程序中,我使用recyclerview
和horizontal layout
。RecyclerView物品失去焦點
使用dpad工作和項目滾動越來越關注。
但是當我按住按鈕時,它會非常快速地滾動,因爲許多keydown事件被觸發,並且項目正在失去焦點,並且無法再滾動,因爲我的recyclerview上方的另一個Textview
正在獲得焦點。
它看起來像一個錯誤。有沒有解決方法?
我面臨同樣的問題,我在我的項目做在我的活動(含RecyclerView)下面喜歡:
private long mLastKeyDownTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
long current = System. currentTimeMillis();
boolean res = false;
if (current - mLastKeyDownTime < 300) {
res = true;
} else {
res = super.onKeyDown(keyCode, event);
mLastKeyDownTime = current;
}
return res;
}
,當你按住DPAD的按鈕,這避免了快速滾動,焦點在我的RecyclerView中正常工作。
thx,我會在下一個項目中嘗試一下! – sNore
看起來像這是一個錯誤。
見https://stackoverflow.com/a/33190656/332798和https://issuetracker.google.com/issues/37067220
我能夠絕育我的項目的看法clearFocus()
來解決這個bug,失去焦點,這樣超脫的觀點沒有動焦點RecyclerView外:
override fun clearFocus() {
if (parent != null)
super.clearFocus()
}
我遇到了同樣的問題。好消息是,流行的應用程序(YouTube和其他)沒有這個問題。 我發現了信息resource。經過調查,我提出了一個方便我的解決方案。 的關鍵是使用Presenter代替Adapter 有最簡單的例子
//Presenter class
public class ItemViewPresenter extends Presenter {
@Override
public final ViewHolder onCreateViewHolder(ViewGroup parent) {
//I use data binding
ItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item, parent, false);
return new MyViewHolder(binding);
}
@Override
public final void onBindViewHolder(ViewHolder viewHolder, Object item) {
String text = (String) item;
((MyViewHolder) viewHolder).bind(text);
}
@Override
public final void onUnbindViewHolder(ViewHolder viewHolder) {
}
private class MyViewHolder extends Presenter.ViewHolder {
private final ItemBinding binding;
private DiscoveryViewHolder(ItemBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
private void bind(String text) {
binding.textView.setText(text);
}
}
}
//...
private void setupRecyclerView() {
RecyclerView recyclerView = _baseLayout.findViewById(R.id.recyclerView);
ArrayObjectAdapter arrayObjectAdapter = new ArrayObjectAdapter(new ItemViewPresenter());
ItemBridgeAdapter bridgeAdapter = new ItemBridgeAdapter(arrayObjectAdapter);
recyclerView.setAdapter(bridgeAdapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(_baseLayout.getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
List<Strings> textList = new ArrayList(1);
textList.add("1");
//add objects
arrayObjectAdapter.addAll(0, textList);
//clear objects
//arrayObjectAdapter.clear();
}
對於那些誰都會面臨同樣的問題。我找到了一個解決方法。我不再使用RecyclerView。我已經切換到這個HorizontalListView lib:https://github.com/sephiroth74/HorizontalVariableListView,這足以滿足我的需求。 – sNore