ListView上的Clickable imageView

时间:2013-09-17 19:27:50

标签: android android-listview click android-imageview

我有一个列表视图,其中应包含一些数据(文本)和每个项目中的ImageView。 所以这就是我所做的,但看起来ImageView不可点击:

这是布局代码的一部分:

<RelativeLayout 
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:orientation="vertical" 
        android:layout_alignParentLeft="true"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:paddingBottom="5dp" >

        <ImageView
            android:id="@+id/searchIcone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:scaleType="center"
            android:background="#c7c7c7"
            android:layout_marginTop="60dp"
            android:layout_marginRight="20dp"
            android:clickable="true"
            android:focusable="false"
            android:src="@drawable/search" /> 
</RelativeLayout>

<RelativeLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:layout_alignParentLeft="true"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:paddingBottom="5dp" >
        <TextView
            android:id="@+id/address"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="25dp"
            android:onClick="searchVisiter"
            android:textColor="#000" />

        <TextView
            android:id="@+id/CityCountry"
            android:layout_below="@id/address"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="5dp"
            android:textColor="#000" />

和我的Java代码:

final ListView lv1 = (ListView) findViewById(R.id.ListViewEvents);
        lv1.setAdapter(new EventListViewAdapter(EventListActivity.this, records));

        lv1.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {

                Object o = lv1.getItemAtPosition(position);
                JsonObject response = (JsonObject)o;
                ID = response.getString("ID");

                // If the image is clicked (doesn't work)
                final ImageView img1 = (ImageView) findViewById(R.id.searchIcone);
                img1.setClickable(true);

                img1.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        Intent intent = new Intent(EventListActivity.this, ZBarScannerActivity.class);
                        startActivity(intent);

                    }
                });

                // If the list item is clicked (works)
                Intent intent = new Intent(EventListActivity.this, SearchActivity.class);
                startActivity(intent);
            }
        }); 

拜托,你对此有什么想法吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

您所做的是在点击列表中的项目后设置监听器 - 这没有意义。 在方法onItemClick中,您实际上已经点击了View v,因此您可以处理它。

我认为你试着写一些类似的东西:

lv1.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        JsonObject response = (JsonObject) lv1.getItemAtPosition(position);
        ID = response.getString("ID");
        if (v.equals(findViewById(R.id.searchIcone)) {
            Intent intent = new Intent(EventListActivity.this, ZBarScannerActivity.class);
            startActivity(intent);
        } else {
            Intent intent = new Intent(EventListActivity.this, SearchActivity.class);
            startActivity(intent);
        }
    }
}); 

答案 1 :(得分:0)

onClickListner添加到getView

EventListViewAdapter方法
@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ....

    ImageView img1 = (ImageView) convertView.findViewById(R.id.searchIcone);

            img1 .setOnClickListener(new OnClickListener() 
                {
                    @Override
                    public void onClick(View v) 
                    {
            Intent intent = new Intent(EventListActivity.this, ZBarScannerActivity.class);
                startActivity(intent);
                    }
                });


        ....

    }

这应该有效

答案 2 :(得分:0)

我遇到了同样的问题。因为当你点击listItem上的图像时,默认会触发ListView的onclick()方法。 错误是您正在为listView lv1注册setOnItemClickListener()。 而只是禁用listView上的setOnItemClickListener()和适配器类EventListViewAdapter.java中的getView()方法只需插入以下代码:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        //your layout inflater code here

    ImageView iv = (ImageView) convertView.findViewById(R.id.searchIcone);

            iv.setOnClickListener(new OnClickListener() 
             {
              @Override
              public void onClick(View v) {
              Intent intent = new Intent(EventListActivity.this, ZBarScannerActivity.class);
                startActivity(intent);
               }
             });


        ....

    }