3

ユーザーが画像とそれに対応する名前を正しく一致させる必要があるアプリを開発しています。

私の問題は、ユーザーが最初に画像を選択して間違った名前を選択すると、間違った答えが表示され、答えを選択すると正しい答えが表示されることです。

ユーザーが再度画像を選択する必要はありません

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);

どこが間違っているのか、またはそれに対してできる変更を誰かに教えてもらえますか。

前もって感謝します

4

5 に答える 5

3

使ってみて

       txt_tag[0].setClickable(false);
       txt_tag[1].setClickable(false);
       ..
       img[0].setClickable(false);
       img[1].setClickable(false);
       ..
于 2012-04-27T10:28:43.140 に答える
2

私があなたなら、リスナーでそのロジックをチェックします。そのため、質問 (クイズの場合) が「回答済み」の状態にある場合は、イベントに反応しないでください。

于 2012-04-27T10:30:24.047 に答える
2

あなたの質問はそれほど明確ではありません..しかし、画像とテキストタグをクリックできないようにしたい場合は..それらandroid:clickable="false"をxmlで作成するか、setClickable(false);

于 2012-04-27T10:17:19.063 に答える
1

あなたの質問は不明確ですが、私はそれを次のように理解しています:

  • あなたはそれらの間にたくさんのそしてImageViewsたくさんのTextViewsそしてマッピングを持っています。
  • ImageView最初に、を選択し、次にを選択できるようにする必要がありますTextView。一致する場合は「正解」が表示され、一致しない場合は「不正解」が表示されます
  • ImageViewが選択される前にTextViewをクリックしても、何も起こりません
  • Textviewをクリックし、別のTextViewがすでに選択されている場合、何も起こりません

それが正しければ、次のように行うことができます。2つの変数を保持します

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);

クリックするとすぐにすべての要素に。新しい画像を選択した場合は、もう一度クリック可能に設定する必要があります。

Listeners編集:そして私はロブに同意します、あなたはこの振る舞いを達成するためにあなたを削除するべきではありません。

于 2012-04-27T10:49:15.043 に答える
1

これが私の提案です。特定の動作をコード化したい場合は、 onClickListener コールバックを使用して目的を達成できます。

リスナーで、イメージの状態を確認します。すでに選択されていて、イベントを無視したい場合は、コールバックを終了するだけです。

onClickListener を null に設定するのは間違っていると思います。

于 2012-04-27T10:40:55.687 に答える