使用RecyclerView是Item里的ImageView无法响应Click事件,但是Touch可以

warcraftmgq 2018-05-08 04:39:19
这个是项布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<ImageView
android:id="@+id/imgMachine"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_72"
android:layout_marginLeft="@dimen/dp_8"
android:layout_marginRight="@dimen/dp_8"
android:clickable="true"
android:longClickable="true"
android:src="@drawable/machine" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">

<TextView
android:id="@+id/txtMachineTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一号清洗站#1"
android:textSize="@dimen/sp_8" />

<TextView
android:id="@+id/txtMachineMac"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>


这个是自定义Adapter里面的ViewHolder

class MachineGridViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

/**
* The Machine.
*/
ImageView machine;
/**
* The Title.
*/
TextView title;

/**
* The Mac.
*/
TextView mac;

/**
* Instantiates a new Machine grid view holder.
*
* @param itemView the item view
*/
public MachineGridViewHolder(View itemView) {
super(itemView);

machine = (ImageView) itemView.findViewById(R.id.imgMachine);
title = (TextView) itemView.findViewById(R.id.txtMachineTitle);
mac = (TextView) itemView.findViewById(R.id.txtMachineMac);

machine.setOnClickListener(this);
}

@Override
public void onClick(View v) {
if (listener != null) {
listener.onItemClick(mac.getText().toString());
}
}
}


很奇怪title和mac控件都能正常响应Click事件,但是machine这个ImageView死活没效果。
...全文
962 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
philadelphiazt 2018-11-28
  • 打赏
  • 举报
回复
ImageView调用bringToFront即可
BandaYung 2018-05-09
  • 打赏
  • 举报
回复
博主,估计是你在调用myAdapter.setItemClick()顺序上有问题吧,它应该如楼上所写在mRecyclerView.setAdapter()前面。
键盘舞者113 2018-05-08
  • 打赏
  • 举报
回复
明明可以,可能是你id为txtMachineMac的TextView的getText为空,下面是我的代码,运行没问题

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myAdapter = new MyAdapter(this);
        myAdapter.setItemClick(new ItemClick() {
            @Override
            public void onItemClick(String s) {
                Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
            }
        });
        mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(myAdapter);
    }



}


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MachineGridViewHolder> {

    ItemClick listener;
    Context context;

    MyAdapter (Context context ) {
        this.context = context;
    }

    @Override
    public MachineGridViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        MachineGridViewHolder holder = new MachineGridViewHolder(LayoutInflater.from(
                context).inflate(R.layout.item, parent,
                false));
        return holder;
    }

    @Override
    public void onBindViewHolder(MachineGridViewHolder holder, int position)
    {

    }

    @Override
    public int getItemCount()
    {
        return 20;
    }



    public void setItemClick(ItemClick itemClick) {
        this.listener = itemClick;
    }

    class MachineGridViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        /**
         * The Machine.
         */
        ImageView machine;
        /**
         * The Title.
         */
        TextView title;

        /**
         * The Mac.
         */
        TextView mac;

        /**
         * Instantiates a new Machine grid view holder.
         *
         * @param itemView the item view
         */


        public MachineGridViewHolder(View itemView) {
            super(itemView);

            machine = (ImageView) itemView.findViewById(R.id.imgMachine);
            title = (TextView) itemView.findViewById(R.id.txtMachineTitle);
            mac = (TextView) itemView.findViewById(R.id.txtMachineMac);

            machine.setOnClickListener(this);

/*            machine.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(mac.getText().toString());
                }
            });*/

        }

        @Override
        public void onClick(View v) {
            if (listener != null) {
                listener.onItemClick(mac.getText().toString());
            }
        }
    }
}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/imgMachine"
        android:clickable="true"
        android:longClickable="true"
        android:src="@mipmap/ic_launcher" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/txtMachineTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="一号清洗站#1"/>

        <TextView
            android:id="@+id/txtMachineMac"
            android:text="mac"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone" />
    </LinearLayout>
</LinearLayout>

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧