如何确定图像是在 Android 的适配器中单击

Posted

技术标签:

【中文标题】如何确定图像是在 Android 的适配器中单击【英文标题】:How to determine with image was click in Adapter in Android 【发布时间】:2021-08-29 09:56:57 【问题描述】:

我试图弄清楚当图像都在 FrameLayout 中并且视图被适配器膨胀时,我如何确定用户点击了哪个图像

Adapter 的 setItemClickListener 如下:(pos 用于确定数组中的哪个元素被点击,因此列表中的第一项为 0,依此类推...):

holder.setItemClickListener(new ItemClickListener() 

    @Override
    public void onItemClick(View v, int pos) 

        switch (pos) 

           case 0:

               // First item was clicked
               break;

           case 1:

               // Second item was clicked
               break;

       

       Toast.makeText(v.getContext(), "Clicked list item = " + pos, Toast.LENGTH_SHORT).show();

    

);

以下是保存项目列表的布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rootView"
    android:layout_
    android:layout_
    android:orientation="vertical">

    <androidx.cardview.widget.CardView
        android:layout_
        android:layout_ >

        <ImageView
            android:layout_
            android:layout_
            android:layout_centerHorizontal="true"
            app:srcCompat="@drawable/background" />


        <ImageView
            android:id="@+id/awayTeam"
            android:layout_
            android:layout_
            android:layout_gravity="top|left" />

        <ImageView
            android:id="@+id/homeTeam"
            android:layout_
            android:layout_
            android:layout_gravity="top|right"
            android:scaleX="-1" />

        </androidx.cardview.widget.CardView>

    </FrameLayout>

</LinearLayout>

如何确定用户在列表中的位置单击了哪个 ImageView?

更新:

class GameViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 

    private ItemClickListener mListener;

    private ImageView awayTeamImageView, homeTeamImageView;


    public GameViewHolder(View itemView) 
        super(itemView);

        awayTeamImageView = itemView.findViewById(R.id.awayTeam);

        homeTeamImageView = itemView.findViewById(R.id.homeTeam);

        itemView.setOnClickListener(this);

    

    Override
    public void onClick(View v) 

        this.mListener.onItemClick(v, getLayoutPosition());

    

    public void setItemClickListener(ItemClickListener listener) 

        this.mListener = listener;

    


【问题讨论】:

【参考方案1】:

试试下面的代码

holder.setItemClickListener(new ItemClickListener() 

@Override
public void onItemClick(View v, int pos) 

    switch (v.getId()) 

       case R.id.awayTeam:

           // click on image awayTeam
           break;

       case R.id.homeTeam:

           // click on image homeTeam
           break;

   

   Toast.makeText(v.getContext(), "Clicked list item = " + pos, Toast.LENGTH_SHORT).show();



);

// Also update your holder code
 public GameViewHolder(@NonNull View itemView) 
        super(itemView);
        itemView.setOnClickListener(this);
        awayTeamImageView = itemView.findViewById(R.id.awayTeam);
        homeTeamImageView = itemView.findViewById(R.id.homeTeam);
        awayTeamImageView.setOnClickListener(this);
        homeTeamImageView.setOnClickListener(this);
    

【讨论】:

我试过了; v.getId() 总是返回 -1 我不明白为什么!? 我想我已经添加了您要求的内容。

以上是关于如何确定图像是在 Android 的适配器中单击的主要内容,如果未能解决你的问题,请参考以下文章

在android中单击相机后,无需按确定按钮即可从相机获取图像

如何使用 Facebook android 共享图像

网络适​​配器 NUMA

spinner android kotlin 的自定义适配器不可见,但在单击下拉值时可见

Android:自定义列表视图列表元素点击

如何在android中单击listview适配器时展开和折叠视图