我有一个列表视图,其中应包含一些数据(文本)和每个项目中的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);
}
});
拜托,你对此有什么想法吗?
谢谢。
答案 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);
}
});
....
}