4

重複の可能性:
public boolean onKey() が 2 回呼び出されましたか?

ラジオ ボタンで popUp ビューを呼び出す EditText フィールドがあります。PopUp と RadioGroup の実装はうまく機能します。しかし、押されたとき、または EditText にタッチすると、onTouchListener が 2 回呼び出されることに気付きました。また、前の質問の理由が同じ問題であることにも気づきました。これが EditText です。

etOdemeSekli = (EditText)findViewById(R.id.etOdemeSekli);
        etOdemeSekli.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                inflatePopUpOdemeSekli();
                Log.d("****","Inflate");                    
            return false;
            }
        }); 

ここにEditTextのxmlがあります

<EditText
    android:layout_weight="1"                   
    android:id="@+id/etOdemeSekli"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:hint="@string/odemeSekliHint"
    android:focusableInTouchMode="false">
</EditText>

この二重呼び出しのため、popup の動作がおかしくなりました。Dismiss() 呼び出しが正しく機能しません。その理由は何ですか?本当に迷惑です、ありがとうございます。

4

1 に答える 1

12

二重呼び出しは、タッチ リスナーが 2 回 (少なくとも!) 起動するためです。1 回は、指が EditText に着地したとき (ACTION_DOWN) で、もう 1 回は指を離したとき (ACTION_UP) です。これを修正するには、1 つのケースでのみアクティブ化するようにしてください。onClickまたは、代わりにリスナーを設定することもできます。

      public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
              inflatePopUpOdemeSekli();
            }

            return false;
      }
于 2012-04-30T01:18:21.197 に答える