我在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
,这也无法捕获点击次数。所以现在我怀疑这些观点被某些东西掩盖了。也许有些东西是捕捉点击而不是视图。
答案 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
中使用imageView
和textview
。
答案 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"
我不确切知道发生了什么,但点击事件似乎没有归结为TextView
和ImageView
。奇怪的是,当我添加一个用于调试目的时,单击事件 到达Button
。如果有人对实际发生的事情有更深入的了解,请发表评论并更新此答案。