gpt4 book ai didi

android - 奇怪的 Android RecyclerView (GridLayoutManager) 焦点行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:08 25 4
gpt4 key购买 nike

我有一个带有 GridLayoutManager 的 RecyclerView,每行 2 列。因为开发是针对 Android TV 的,所以我需要专注于导航。

enter image description here

如果我使用向下键导航到任何可见的项目,那没关系。例如,项目 1 -> 项目 3 -> 项目 5 -> 项目 7(仅部分可见。)。但是当我再次按下键时,焦点将移动到项目 10 而不是 9。

enter image description here

我的 GridView 适配器是:

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> {    
private ArrayList<String> mDataset;

public GridAdapter(ArrayList<String> myDataset) {
mDataset = myDataset;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.grid_item, viewGroup, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.txtTitle.setText(mDataset.get(position));
}

@Override
public int getItemCount() {
return mDataset.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder {

public TextView txtTitle;
public ViewHolder(View v) {
super(v);
txtTitle = (TextView) v.findViewById(R.id.title);
}
}
}

知道如何解决这个问题吗?谢谢。

最佳答案

查看this related postVganin's answer解决您的问题。

I reported this bug to AOSP issue tracker: issue 190526

As I can see from source the issue is because GridLayoutManager uses LinearLayoutManager's implementation of onFocusSearchFailed() which is called when focus approaches the inner border of RecyclerView. LinearLayoutManager's implementation just offers first/last (depends on scrolling direction) element. Hence focus jumps to first/last element of new row.

My workaround for this issue.

关于android - 奇怪的 Android RecyclerView (GridLayoutManager) 焦点行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28102987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com