Android:处理放置在 RecyclerView 中的 ImageView 上的点击

标签 android onclick imageview android-recyclerview

我刚从 ListView 移动到 RecyclerView,我遇到了一个问题:我无法让 ImageView 的 onClickListener 工作。基本上我想要的是当用户点击它时在新 Activity 中以全屏模式显示图像。

像这样:

enter image description here

我尝试过的:

@Override
    public PaletteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.
                from(parent.getContext()).
                inflate(R.layout.card_view, parent, false);

        return new PaletteViewHolder(itemView);

    }
@Override
    public void onBindViewHolder(PaletteViewHolder holder,final int position) {
        Palette palette = palettes.get(position);
        holder.text1.setText(palette.getName());
        holder.text2.setText(palette.getHexValue());
        final Context context = holder.img.getContext();
        Picasso.with(context)
                .load(DaciaData.DaciaModele[position])
                .placeholder(R.drawable.placeholder)
                .error(R.drawable.error)
                .resizeDimen(R.dimen.list_detail_image_size, R.dimen.list_detail_image_size)
                .centerInside()
                .tag(context)
                .into(holder.img);

        holder.img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bundle bundle = new Bundle();
                //add data to your bundle
                bundle.putInt("id", position);
                //create intent
                Intent mainIntent = new Intent(context, Extra1.class);
                //add bundle to intent
                mainIntent.putExtras(bundle);
                //start activity
                context.startActivity(mainIntent);
            }
        });
    }

编辑

RecyclerItemClickListener:

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
    private OnItemClickListener mListener;

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

    GestureDetector mGestureDetector;

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }

    @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        View childView = view.findChildViewUnder(e.getX(), e.getY());
        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildPosition(childView));
            return true;
        }
        return false;
    }

    @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
}

MainRecyclerView 这是我定义 RecyclerView 以及 onItemTouchListener 的地方:

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerModels);
        LinearLayoutManager linearLM = new LinearLayoutManager(getActivity());
        linearLM.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLM);

        recyclerView.addOnItemTouchListener(                 
                new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        Bundle bundle = new Bundle();
                        bundle.putInt("id", position);

                        Intent i = new Intent(getActivity(), MainViewPager.class);
                        i.putExtras(bundle);
                        startActivity(i);
                    }
                })
        );

删除 recyclerView.addOnItemTouchListener(); 将解决图像长按的问题,但我将无法启动 ViewPager,我想有问题RecyclerItemClickListener 错误。

最佳答案

对不起,我迟到了,我最终解决了这个问题。我所要做的就是删除 recyclerView.addOnItemTouchListener(...);,然后我在适配器中实现了 View.OnClickListener,然后我设置了 TextViewImageView 的 OnClickListener 方法,如下所示:

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        protected TextView textView;
        protected ImageView imageView;

        public ContactViewHolder(View v) {
            super(v);
            textView =  (TextView) v.findViewById(R.id.t1);
            imageview = (ImageView)  v.findViewById(R.id.img);

            textView.setOnClickListener(this);
            imageview.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {    

        if (v.getId() == textView.getId()) {
          Toast.makeText(context, "TextView Clicked!", Toast.LENGTH_LONG).show();
        } else if (v.getId() == imageView.getId()) {
          Toast.makeText(context, "ImageView Clicked!", Toast.LENGTH_LONG).show();
        }
    }

关于Android:处理放置在 RecyclerView 中的 ImageView 上的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658479/

相关文章:

android - 三星商店应用程序安装程序包名称

android - webview的iframe下拉刷新

android - 当我在 textView 上放一个长字符串时,为什么有些字符看起来像这些照片??

android - BitmapFactory.decodeFile 即使图像存在也返回 null

Android Studio Gradle : Please remove usages of `jcenter()` Maven repository from your build scripts/JCenter is at end of life

javascript - 未嵌入帖子中的禁用按钮

javascript - 需要 onclick 是按钮而不是热链接

java - 它不会对total=i1+i2+i3+i4+i5给出的值求和; t17.setText(String.valueOf(total));在t17时总是显示0

android - 如何滚动背景图片?

android - 在 android 中,我可以将 subview 添加到 ImageView 吗?