RecyclerView单击不起作用,但单击两次后工作

nlo*_*ogn 21 android android-recyclerview

我试图获得RecyclerView我正在使用回调机制的项目的点击.我已经创建了OnItemClickListenerInterface和内部自定义适配器,我已经编写了用于检测点击的逻辑View.OnClickListener.但是,在双击列表中的任何项目后,我在myActivity中收到回调.没有任何线索在这里发生了什么!

活动代码:

mAdapter = new AppAdapter(this, mAppList, new OnItemClickListener() {
        @Override
        public void onItemClick(View v, int position) {

            Toast.makeText(SelectAppActivity.this, "Hello", Toast.LENGTH_SHORT).show();
        }
});

recyclerview.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)

接口代码:

public interface OnItemClickListener {

    void onItemClick(View v, int position);
}
Run Code Online (Sandbox Code Playgroud)

自定义适配器代码:

public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ItemViewHolder> {

    List<App> mAppList;
    List<App> mFilterAppList;
    Activity context;
    OnItemClickListener onItemClickListener;

    public AppAdapter(Activity context, List<App> appList, OnItemClickListener onItemClickListener) {
        super();
        this.context = context;
        this.mAppList = appList;
        this.mFilterAppList = appList;
        this.onItemClickListener = onItemClickListener;
    }

    @Override
    public ItemViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
        final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app_list, parent, false);

        final ItemViewHolder viewHolder = new ItemViewHolder(view);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onItemClickListener.onItemClick(v,4);
            }
        });
        return viewHolder;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public void onBindViewHolder(ItemViewHolder holder, int position) {
        final App app = mAppList.get(position);
        holder.name.setText(app.getmName());
        holder.icon.setImageDrawable(app.getmAppIcon());
    }

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

    public void setFilter(List<App> appList) {
        mAppList = new ArrayList<>();
        mAppList.addAll(appList);
        notifyDataSetChanged();
    }

    public static class ItemViewHolder extends RecyclerView.ViewHolder {

        public TextView name;
        public ImageView icon;

        public ItemViewHolder(View view) {
            super(view);
            name = (TextView) itemView.findViewById(R.id.app_name);
            icon = (ImageView) itemView.findViewById(R.id.app_icon);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

nlo*_*ogn 14

问题与我的布局中的android:focusable ="true"有关,因为我删除了它工作正常,所有建议的答案也工作正常.谢谢,所有.


Ali*_*a K 10

如果在NestedScrollView中使用RecyclerView,请将此行添加到RecyclerView中:

android:nestedScrollingEnabled="false"
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助。


mpk*_*asp 5

还有一个已知的错误,对于那些在居住的人来说,请参考此替代方法来解决此问题


小智 1

在 ItemViewHolder 中添加 Click-listener,效果很好。

    public static class ItemViewHolder extends RecyclerView.ViewHolder {

    public TextView name;
    public ImageView icon;

    public ItemViewHolder(View view) {
        super(view);
        name = (TextView) itemView.findViewById(R.id.app_name);
        icon = (ImageView) itemView.findViewById(R.id.app_icon);

        view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //getLayoutPosition is a method of RecyclerView
            onItemClickListener.onItemClick(v,getLayoutPosition());
        }
    });

    }

}
Run Code Online (Sandbox Code Playgroud)