【问题标题】:How to autoselect 1st item from RecyclerView?如何从 RecyclerView 中自动选择第一项?
【发布时间】:2018-12-01 23:59:27
【问题描述】:

我的应用程序中有一个recyclerView,其中包含一个菜单列表,当我按下其中一个时,是否会更改另一个recyclerView 中的项目,但是当我打开我的活动时,没有一个recyclerView 有菜单被选中。

所以问题是我如何打开活动并找到选中的recyclerView 的第一项?

我试图模拟 Handler 的点击,但它让我的应用变慢了。

这是来自我的适配器的代码:

public class RecyclerViewMenu extends RecyclerView.Adapter<RecyclerViewMenu.MenuViewHolder> {

    private ArrayList<MenuConstructor> menuConstructors;
    private OnItemClickListener onItemClickListener;
    private int selected_position = -1;



    public interface  OnItemClickListener {
        void onItemClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener){
        onItemClickListener = listener;
    }

    @NonNull
    @Override
    public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.menucard,parent,false);
        return new MenuViewHolder(v, onItemClickListener);

    }


    RecyclerViewMenu(ArrayList<MenuConstructor> menuList){
        menuConstructors = menuList;
    }

    @Override
    public void onBindViewHolder(@NonNull final MenuViewHolder holder, final int position) {
        MenuConstructor currentItem = menuConstructors.get(position);

        if (selected_position == position) {
            holder.itemView.setBackgroundColor(Color.parseColor("#2e7d32"));

        } else {
            holder.itemView.setBackgroundColor(Color.parseColor(currentItem.getSfondoColor()));
        }

        holder.textView.setText(currentItem.getDesk());
        holder.textView.setTextColor(Color.parseColor(currentItem.getFontColor()));




    }

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

    public class MenuViewHolder extends RecyclerView.ViewHolder {

        public TextView textView;

        MenuViewHolder(View itemView, final OnItemClickListener listener) {
            super(itemView);

            textView = itemView.findViewById(R.id.ButtonName);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        if(listener != null){
                            int position = getAdapterPosition();
                            if (position != RecyclerView.NO_POSITION){
                                listener.onItemClick(position);
                                selected_position = position;
                                notifyDataSetChanged();
                            }
                        }


                }
            });



        }
    }

}

这是我的活动截图,您可以看到“CICCIO”是我在recyclerView 中的第一项,但它是手动选择的。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    你有没有在你的活动中尝试过这个:

    recyclerView.findViewHolderForAdapterPosition(0).itemView.performClick()
    

    【讨论】:

    • 这就是我在处理程序中为模拟点击所做的事情,但是如果没有处理程序 onCreate 我不能把它放在上面,因为它会崩溃。
    • 是的...您可能需要一个处理程序...那么您是否在寻找性能更好的解决方案?
    • 是的,这就是我想要的。
    • 这有点时髦……但你看过这个吗?stackoverflow.com/questions/30167929/…
    • 是的,实际上我还没有看到它,但我无法找到初始化位置变量的位置
    【解决方案2】:

    变量 selected_position 应该在 Utils 类中公开,然后在 onCreate 中设置 selected_position = 0

    public class Utils {
        public static final int selected_position = -1;
    }
    

    然后你在 onCreate Utils.selected_position = 0; 中使用它 并在 onBindViewHolder if (position == Utils.selected_position)

    当然你必须删除这一行:private int selected_position = -1;

    【讨论】:

    • 静态Utils中如何设置变量为public?
    • 所以我必须创建一个名为 Utils 的部分?
    • 是的,名字并不重要。
    【解决方案3】:

    您好,您可以使用 performClick() 函数..

    if(positon == 0)
     holder.itemView.performClick();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      相关资源
      最近更新 更多