我有一个包含setOnItemClickListener
和setOnItemSelectedListener
的全屏图库。在那个画廊,我有一个线性布局与3个ImageViews。我已经完成了可点击的图像视图,但是当我点击它们时,gallery.setOnItemClickListener
就是被激活的。我怎样才能让他的ImageViews可点击?
Tha布局完整的布局非常复杂,所以我正在绘制相关部分的图像。
在我的代码中:
ImageView prev = (ImageView) findViewById(R.id.previousImage);
ImageView play = (ImageView) findViewById(R.id.playAllImages);
ImageView next = (ImageView) findViewById(R.id.nextImage);
prev.setClickable(true);
prev.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
YADA YADA YADA ...
}
});
next.setClickable(true);
next.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
YADA YADA YADA ...
}
});
play.setClickable(true);
play.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
YADA YADA YADA ...
}
});
我也有画廊的听众:
_horizGallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
YADA YADA YADA...
}
});
_horizGallery.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView parent, View view,
int position, long id) {
YADA YADA YADA...
}
public void onNothingSelected(AdapterView parent) {
YADA YADA YADA...
}
});
xml是这样的(我拿出了一些不相关的部分,以便在实际使用时缩小它):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:background="#11000000" android:layout_alignParentBottom="true"
android:weightSum="1.0" android:id="@+id/layoutToScrollDown">
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:layout_weight="0.1" android:gravity="center">
<ImageView android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/icon"
android:padding="1px" android:id="@+id/previousImage"> </ImageView>
</LinearLayout>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:layout_weight="0.4" android:gravity="center">
<ImageView android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/icon"
android:padding="1px" android:id="@+id/playAllImages"> </ImageView>
</LinearLayout>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:layout_weight="0.1" android:gravity="center">
<ImageView android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/icon"
android:padding="1px" android:id="@+id/nextImage"> </ImageView>
</LinearLayout>
</LinearLayout>
<com.pixable.android.ModifiedGallery xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.pixable.android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/HorizontalGallery"
android:gravity="center_vertical" android:spacing="2px"/>
所有这些都在一个相对的观点中,由于某种原因没有显示出来。
答案 0 :(得分:1)
我认为因为您对findViewById
的调用只涉及外部父视图,即您的图库,所以点击它的任何地方都会触发图库的itemClickListener。
另外我认为将每个ImageView包装在自己的LinearLayout中会导致问题。您应该考虑在其中包含1个LinearLayout和ImageViews。
你需要做什么然后我认为是膨胀布局然后从该视图中检索ImageView以向其添加监听器。
View v = LayoutInflater.from(context).inflate(R.id.layoutToScrollDown,null);
或按如下方式对视图进行充气:
View v = View.inflate(context,R.id.layoutToScrollDown,null);
或者甚至可以尝试findviewbyid:
View v = findViewById(R.id.layoutToScrollDown);
然后获取ImageViews:
ImageView prev = (ImageView) v.findViewById(R.id.previousImage);
ImageView play = (ImageView) v.findViewById(R.id.playAllImages);
ImageView next = (ImageView) v.findViewById(R.id.nextImage);
然后,您可以照常继续关注您的代码。
我希望这有帮助!
答案 1 :(得分:0)
您的图库位于布局XML文件中的图像下方。这意味着图库在点击方面位于您的图像前面。
您需要在任何图片之前放置图库组件。考虑使用RelativeLayout
作为外部元素。将图库组件放在LinearLayout
之前,并将图片放入。将android:layout_alignParentTop="true"
添加到图库,然后将android:layout_alignParentBottom="true"
添加到LinearLayout
容器。
此外,无需将每个ImageView
包裹在LinearLayout
内 - 这只会使您的应用的UI速度变慢。