这个是项布局<?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里面的ViewHolderclass 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死活没效果。

解决方案 »

  1.   

    明明可以,可能是你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>
      

  2.   

    博主,估计是你在调用myAdapter.setItemClick()顺序上有问题吧,它应该如楼上所写在mRecyclerView.setAdapter()前面。
      

  3.   

    ImageView调用bringToFront即可