android - 将焦点放在 recyclerview 项目上

标签 android android-recyclerview

我真的想将焦点设置在特定的 RecyclerView 项目上。 我试过了

recyclerView.scrollToPosition(1);

在我的 initializeRecyclerView 方法中。我也试过了

holder.setSelected(selectedItem==position)

没有成功。

你能帮帮我吗?

这是我的适配器:

 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.radio_item, parent, false);
    return new ViewHolder(v);
}

/**
 * Set the properties of a RecyclerView item
 * @param holder RecyclerView item
 * @param position Position of the item in the items list
 */
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    Radio radio = radios.get(position);
    holder.radio = radio;
    ImageHelper.setImage(context, holder.imageButton, radio.getLogoPath(), context.getDrawable(Const.DEFAULT_RADIO_LOGO_DRAWABLE) );
    holder.imageButton.setBackground(context.getDrawable(R.drawable.button));
    holder.imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(clickListener != null){
                clickListener.onRadioClick(holder.getAdapterPosition());
            }
        }
    });
}
public class ViewHolder extends RecyclerView.ViewHolder{
    private ImageButton imageButton;
    public Radio radio;

    private ViewHolder(View itemView) {
        super(itemView);
        imageButton = itemView.findViewById(R.id.radioButton);
    }
}

在我的 fragment 中:

if(getView()!=null){
        RadiosAdapter recyclerAdapter = new RadiosAdapter(radios, getActivity());
        RecyclerView recyclerView = getView().findViewById(R.id.radios_recycler);
        recyclerView.setAdapter(recyclerAdapter);

        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), columnNumber, LinearLayoutManager.VERTICAL, false));
        if(currentRadio !=null){
            recyclerView.scrollToPosition(currentRadio.getPosition());
        }
        else{
            recyclerView.scrollToPosition(1);
        }

        if(getActivity() != null && getActivity() instanceof OnClickListener){
            OnClickListener listener = (OnClickListener)getActivity();
            recyclerAdapter.setClickListener(listener);
        }
    }

谢谢!

最佳答案

使用 requestFocus()可能会解决你的问题。 但如果没有,我解决了同样的问题,

adapter我覆盖了 OnViewAttachedToWindow()在那里我调用requestFocus()当 ViewHolder 是匹配项时。

引用 - https://stackoverflow.com/a/41232962/7616455

关于android - 将焦点放在 recyclerview 项目上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521233/

相关文章:

java - 我正在尝试使用 getter 和 setter 从我的 firebase 数据库中检索数据,但收到错误消息说无法转换对象

android - 安全共享首选项android

android - 错误 :Error converting bytecode to dex: Multiple dex files define

android - 如何让 RecyclerView 对齐到中心并能够滚动到所有项目,而中心是 "selected"?

android - 获取 RecyclerView 中的可见项目

java - 如何在Android中实现SearchView

java - 我想从 Realm 数据库中删除数据,但它给了我错误

android - 通过触摸模式检测多点触控

android - TextView编程中如何设置撇号

android - runOnUiThread 未在 AsyncTask 中运行