可能导致ImageView无法点击的原因

时间:2017-05-22 15:32:49

标签: android imageview onclicklistener

我在Android应用中使用ImageView作为NEXT按钮,负责将下一页结果加载到当前活动中。但是,尽管我将一个点击监听器绑定到它,但我似乎无法捕获此ImageView上的点击事件。这是XML:

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="50"
    android:gravity="left"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/listBackIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/back_icon"/>
    <TextView
        android:id="@+id/listBackLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Prev"
        android:textSize="16dip"/>
</LinearLayout>

这是相关的Java代码:

ImageView forwardIconView = (ImageView)findViewById(R.id.listBackIcon);
// not sure if necessary; doesn't fix it anyway
forwardIconView.setClickable(true);
forwardIconView.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        ++pageNumber;
        try {
            params.put("page", pageNumber);
        } catch (JSONException e) {
            // do something
        }
        ConnectionTask task = new ConnectionTask();
        task.execute(new String[0]);
    }
});

我花了大约一个小时在Stack Overflow上研究这个。我找到了一些声称ImageView可以直接点击的地方,但大多数建议使用其他类型的小部件进行解决方法。

有关我的布局/代码的任何内容都是这种行为的罪魁祸首吗?

更新

我还尝试将点击监听器绑定到与TextView处于同一级别的ImageView,这也无法捕获点击次数。所以现在我怀疑这些观点被某些东西掩盖了。也许有些东西是捕捉点击而不是视图。

4 个答案:

答案 0 :(得分:0)

我会这样设置:

private ImageView nextButton;
nextButton = (ImageView)view.findViewById(R.id.back_button);  

Util.loadImage(getActivity(),R.drawable.some_image,Next按钮); //这里我会加载图片,但我看到你是用XML做的。

 nextButton.setOnClickListener(nextButtonListener);

 nextButton.setEnabled(true);

 View.OnClickListener nextButtonListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    Log.v(TAG, "ImageView has been clicked. do something.");

    }
};

这适合我。

答案 1 :(得分:0)

为什么不将// Mosè Bottacini's code see the link above public static string ToRoman(int number) { if ((number < 0) || (number > 3999)) throw new ArgumentOutOfRangeException("insert value betwheen 1 and 3999"); if (number < 1) return string.Empty; if (number >= 1000) return "M" + ToRoman(number - 1000); if (number >= 900) return "CM" + ToRoman(number - 900); if (number >= 500) return "D" + ToRoman(number - 500); if (number >= 400) return "CD" + ToRoman(number - 400); if (number >= 100) return "C" + ToRoman(number - 100); if (number >= 90) return "XC" + ToRoman(number - 90); if (number >= 50) return "L" + ToRoman(number - 50); if (number >= 40) return "XL" + ToRoman(number - 40); if (number >= 10) return "X" + ToRoman(number - 10); if (number >= 9) return "IX" + ToRoman(number - 9); if (number >= 5) return "V" + ToRoman(number - 5); if (number >= 4) return "IV" + ToRoman(number - 4); if (number >= 1) return "I" + ToRoman(number - 1); throw new ArgumentOutOfRangeException("something bad happened"); } ... var failed = Enumerable.Range(1, 3000) .Select(i => new { arabic = i, roman = ToRoman(i) }) .Where(item => item.arabic != RomanToArabic(item.roman)) .Select(item => $"{item.roman} expected: {item.arabic} actual: {RomanToArabic(item.roman)}"); // No line should be printed out Console.Write(string.Join(Environment.NewLine, failed)); 属性用于textview,而不是android:drawableLeft中使用imageViewtextview

答案 2 :(得分:0)

<ImageView
    android:id="@+id/listBackIcon"
    ...
    android:clickable="true"

或者您可以尝试使用onTouchListener事件过滤器覆盖ACTION_DOWN,而不是onClickListener。同时检查android:clickable="false"的parrents,他们可以阻止孩子点击事件。

答案 3 :(得分:0)

对我来说似乎有用的是来自this SO question的接受答案,其中建议在我的问题中添加以下LinearLayout的每个子元素:

android:duplicateParentState="true"

我不确切知道发生了什么,但点击事件似乎没有归结为TextViewImageView。奇怪的是,当我添加一个用于调试目的时,单击事件 到达Button。如果有人对实际发生的事情有更深入的了解,请发表评论并更新此答案。