2

にダイアログボックスを作成しているEditTextので、をタッチするEditTextと、ボックスに(setOntouchListener)が表示されます。問題は次のとおりです。をタッチするEditTextと、ボックスが2回表示されます(ボックスの[閉じる]ボタンをクリックすると、2番目のボックスが表示され、ボックスの内容はまったく同じです)

FoodText.setOnTouchListener(new OnTouchListener() {
    @Override           
    public boolean onTouch(View arg0, MotionEvent arg1) {

        final Dialog dialog = new Dialog(context);
        dialog.setContentView(R.layout.customfoodinput);
        dialog.setTitle("Insert your Food");

        spinner1 = (Spinner) dialog.findViewById(R.id.spinner_foodTime);            
        spinner2 = (Spinner) dialog.findViewById(R.id.spinner_foodType);

        foodtimeArray.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner1.setAdapter(foodtimeArray);

        foodtypeArray.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner2.setAdapter(foodtypeArray);

        Button btntampung = (Button) dialog.findViewById(R.id.btn_inputfood);

        btntampung.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Object item = spinner1.getSelectedItem();
                String dataspinner = item.toString();

                Object item2 = spinner2.getSelectedItem();
                String dataspinner2 = item2.toString();

                dialog.dismiss();
                FoodText.setText(dataspinner + "; " + dataspinner2);

            }
        });

        dialog.show();

        return false;           
    }
});

誰かが私を助けることができますか?

4

2 に答える 2

6

問題は、タッチイベントが必要以上のインタラクションを検出することです。プレスとリリースを検出するので、2回呼び出されます。if(arg1.getAction(); == MotionEvent.ACTION_DOWN)if( )を使用してtouchListenerでイベントのタイプを確認できるプレスのみを検出する必要があります。

FoodText.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN)
            showDialog();

        return false;
   }
});

より単純なソリューションが必要な場合は、をに置き換えることができonTouchListenerますonClickListener

設定setOnTouchListener(new OnTouchListener()してオーバーライドする代わりにpublic boolean onTouch(View arg0, MotionEvent arg1)、これらの2行のコードを次のように置き換えます。

FoodText.setOnClickListener(new OnClickListener() {
@Override
    public void onClick(View v) {
    }
});

キーボードを無視したい場合は、この質問を使用してキーボードを無効にしてみてください。

于 2012-09-26T08:17:04.233 に答える
0

onClickListenerを使用する必要があります!

画面に指を置いて動かすと、指の新しい位置ごとにいくつかのボックスが表示されます。

于 2012-09-26T08:12:32.177 に答える