将焦点设置在recyclerview项目上

问题描述 投票:0回答:2

我真的想将焦点集中在特定的 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);
    }
}

在我的片段中:

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);
        }
    }

谢谢!

android android-recyclerview
2个回答
6
投票

使用

requestFocus()
可能会解决您的问题。 但如果没有,我通过解决了同样类型的问题,

adapter
中,我覆盖了
OnViewAttachedToWindow()
,并在其中当ViewHolder与项目匹配时调用了
requestFocus()

参考 - https://stackoverflow.com/a/41232962/7616455


0
投票

在 onBindViewHolder 内部调用也适合我,例如,如果您想将焦点放在第一个项目上。

override fun onBindViewHolder(holder: PodcastTvViewHolder, position: Int){
    if (position == 0) holder.itemView.requestFocus()
}
© www.soinside.com 2019 - 2024. All rights reserved.