0

我有一个列表视图,它应该在每个项目中包含一些数据(文本)和一个 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);
            }
        }); 

请问,你对此有什么想法吗?

谢谢你。

4

3 回答 3

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);
        }
    }
}); 
于 2013-09-17T20:02:49.590 回答
0

添加onClickListnergetView方法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);
                    }
                });


        ....

    }

这应该工作

于 2013-09-17T20:01:32.373 回答
0

我遇到了同样的问题。这是因为当您单击 listItem 上的图像时 ..ListViewonclick()的方法是默认触发的。错误是您正在setOnItemClickListener()为您的 listView lv1 注册。相反,只需禁用setOnItemClickListener()listView 并在您的适配器类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);
               }
             });


        ....

    }
于 2014-08-02T09:10:26.010 回答