Recyclerview条目点击不总是有效,有时可以工作,但需要更多的点击(不知道需要点击多少次)。

10

Recyclerview的项目点击有时候无法正常工作,有时候需要更多的点击才能生效(不知道需要点击多少次)。如果只点击一次就无法点击。

注意:几天前我尝试了一次点击,它能够正常工作,但是现在当我再次使用AS运行时,它不能工作了,即使我没有修改过那个文件。

我的代码如下:

public class RecyclerViewAdapterRiwayat extends RecyclerView.Adapter<RecyclerViewAdapterRiwayat.ViewHolder> {

    Context context;
    private static final String TAG = RecyclerViewAdapterRiwayat.class.getSimpleName();

    List<GetDataAdapterRiwayat> getDataAdapter;

    ImageLoader imageLoader1;
    String FIXURL = "http://192.168.1.101/AndroidFileUpload/";
    String url = FIXURL + "uploads/";
    String StatusRiwayat;


    public RecyclerViewAdapterRiwayat(List<GetDataAdapterRiwayat> getDataAdapter, Context context) {

        super();
        this.getDataAdapter = getDataAdapter;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items_riwayat, parent, false);

        ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder Viewholder, int position) {

        final GetDataAdapterRiwayat getDataAdapter1 = getDataAdapter.get(position);

        imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader();

        imageLoader1.get(url+getDataAdapter1.getFotoSetelahRiwayat(),
                ImageLoader.getImageListener(
                        Viewholder.networkImageView,//Server Image
                        R.mipmap.ic_launcher,//Before loading server image the default showing image.
                        android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
                )
        );
        Viewholder.networkImageView.setImageUrl(url+getDataAdapter1.getFotoSetelahRiwayat(), imageLoader1);


        Viewholder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "coba nih5 : "+getDataAdapter1.getNamaJalanRiwayat());

                Intent intent = new Intent(v.getContext(), DetailRiwayatActivity.class);
                context.startActivity(intent);
            }
        });

    }

    @Override
    public int getItemCount() {

        return getDataAdapter.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        public TextView ImageTitleNameView;
        public NetworkImageView networkImageView;

        public ViewHolder(View itemView) {

            super(itemView);
            ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item_riwayat);

            networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView2);
        }


    }
}

你有找到任何解决方案吗? - Jithish P N
6个回答

3

0
将这些添加到您的R.layout.recyclerview_items_riwayat父元素中。
android:clickable="false"
android:focusable="false"

0

试试这个:

   class ViewHolder extends RecyclerView.ViewHolder{

            public TextView ImageTitleNameView;
            public NetworkImageView networkImageView;

            public ViewHolder(View itemView) {

                super(itemView);
                ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item_riwayat);

                networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView2);


                itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                int position = getLayoutPosition(); // use this to get item from list
                    Log.d(TAG, "coba nih5 : "+getDataAdapter1.getNamaJalanRiwayat());

                    Intent intent = new Intent(v.getContext(), DetailRiwayatActivity.class);
                    context.startActivity(intent);
                }
            });
        }

仍然需要更多的点击才能被点击。 - Eggy

0

你的代码

Viewholder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "coba nih5 : "+getDataAdapter1.getNamaJalanRiwayat());

                Intent intent = new Intent(v.getContext(), DetailRiwayatActivity.class);
                context.startActivity(intent);
            }
        });

每次为itemView创建新的监听器,而不是实现OnClickListener或在分配新的监听器之前传递null

 Viewholder.itemView.setOnClickListener(null);
Viewholder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "coba nih5 : "+getDataAdapter1.getNamaJalanRiwayat());

                Intent intent = new Intent(v.getContext(), DetailRiwayatActivity.class);
                context.startActivity(intent);
            }
        });

或者在ViewHolderonCreateViewHolder()中添加监听器

v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                int position = viewHolder.getAdapterPosition(); // use this to get item from list
                    Log.d(TAG, "coba nih5 : "+getDataAdapter1.getNamaJalanRiwayat());

                    Intent intent = new Intent(v.getContext(), DetailRiwayatActivity.class);
                    context.startActivity(intent);
                }
            });

第一种方法不起作用...而第二种方法出现错误“无法解析方法getLayoutPosition()”。 - Eggy
把那段代码放在 onCreateViewHolder 里面,对吧?还是报同样的错误 cannot resolve method getAdapterPosition - Eggy
抱歉,我忘记添加了,视图持有者的getAdapterPosition()方法,因此请使用其对象调用。 - Gaurav

0

将此代码添加到项布局的子视图中(不是根元素,只是子元素!!)(R.layout.recyclerview_items_riwayat):

android:clickable="false"
android:focusable="false"

-1

这可能是由于父视图的onTouch方法拦截了触摸事件。您需要检查是否存在像SwipeLayout这样的父视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接