如何禁用OnClickListerners

时间:2012-04-27 10:14:21

标签: java android onclicklistener

我正在开发一个应用程序,用户必须正确匹配图像及其相应的名称。

我的问题是,当用户首先选择图像并选择错误的名称时,它将显示错误的答案,如果他选择了答案,则会显示正确答案。

用户不必再次重新选择图像

我已将onClickListerner设为null但它不能正常工作我的一些代码如下,

    txt_tag[0] = (TextView) findViewById(R.id.txt_tag1);
    txt_tag[0].setOnClickListener(this);
    txt_tag[0].setTypeface(tf);

    txt_tag[1] = (TextView) findViewById(R.id.txt_tag2);
    txt_tag[1].setOnClickListener(this);
    txt_tag[1].setTypeface(tf);

    txt_tag[2] = (TextView) findViewById(R.id.txt_tag3);
    txt_tag[2].setOnClickListener(this);
    txt_tag[2].setTypeface(tf);

    txt_tag[3] = (TextView) findViewById(R.id.txt_tag4);
    txt_tag[3].setOnClickListener(this);
    txt_tag[3].setTypeface(tf);

    img[0] = (ImageButton) findViewById(R.id.img1);
    img[0].setOnClickListener(this);

    img[1] = (ImageButton) findViewById(R.id.img2);
    img[1].setOnClickListener(this);

    img[2] = (ImageButton) findViewById(R.id.img3);
    img[2].setOnClickListener(this);

    img[3] = (ImageButton) findViewById(R.id.img4);
    img[3].setOnClickListener(this);

    btn_nxt = (Button) findViewById(R.id.btn_next);
    btn_nxt.setOnClickListener(this);

我在该方法中调用了一个方法,其中我已经使所有onClickListerner的null

txt_tag[0].setOnClickListener(null);
txt_tag[1].setOnClickListener(null);
txt_tag[2].setOnClickListener(null);
txt_tag[3].setOnClickListener(null);
img[0].setOnClickListener(null);
img[1].setOnClickListener(null);
img[2].setOnClickListener(null);
img[3].setOnClickListener(null);

任何人都可以告诉我我哪里出错或者我可以对它做任何修改。

提前致谢

5 个答案:

答案 0 :(得分:3)

尝试使用

       txt_tag[0].setClickable(false);
       txt_tag[1].setClickable(false);
       ..
       img[0].setClickable(false);
       img[1].setClickable(false);
       ..

答案 1 :(得分:2)

您的问题不是那么明确..但如果您希望自己的图片和文字标签无法点击,请在xml或android:clickable="false"

中制作setClickable(false);

答案 2 :(得分:2)

如果我是你,我会在听众中检查那个逻辑。因此,如果静止(如果它是一个测验)处于“ANSWERED”状态,则不要对事件作出反应。

答案 3 :(得分:1)

这是我的建议,如果你想要编写特定的行为代码,你可以使用onClickListener回调来实现你想要的。

在监听器中,检查图像的状态;如果它已经被选中并且您想忽略该事件,那么您只需退出回调。

我认为将onClickListener设置为null是错误的。

答案 4 :(得分:1)

你的问题不清楚,但我理解如下:

  • 你有一堆ImageViews和一堆TextViews以及它们之间的映射。
  • 您希望首先选择ImageView,然后选择TextView。如果匹配,“正确答案”将显示在某处,否则,将显示“错误答案”
  • 如果在选择ImageView之前单击TextView,则不会发生任何事情
  • 如果您单击Textview并且已选择另一个TextView,则不会发生任何事情

如果这是正确的,你可以这样做:你保留两个变量

int selectedImage = -1;
int selectedText  = -1;

OnClickListener中,您可以像这样更新其值:

if (source instanceof ImageViews) {
  selectedImage = getArrayIndex(source); // I guess you already have a method to retrieve the index
  selectedText = -1; // reset textSelection
} else {
  if (selectedText < 0) {
    selectedText = getArrayIndex(source);
  }
}
updateAnswerTextView(); // here you check if the two selections (selectedText and selectedImage) match and display the corresponding string.

相反,您可以遍历TextView数组并调用

setClickable(false);
单击一个元素后,立即对每个元素执行

。如果选择了新图像,则必须将它们再次设置为可单击。

编辑:我同意Rob的意见,你不应该删除Listeners来实现这种行为。