2012-09-26 173 views
1

我正在對我的EditText做一個對話框,所以當我觸摸EditText時,該框將顯示(setOntouchListener)。問題是:當我觸摸EditText,該框顯示兩次(當我在框中單擊解僱按鈕,第二個框顯示和框的內容是完全一樣的)對話框顯示兩次

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

任何人都可以幫助我?

+0

onTouch被稱爲每一次觸摸事件。把你的手指放在屏幕上是一種觸摸,釋放是另一種,拖動也可以是另一種。至少有2個對話框。 – njzk2

+0

我明白了,所以爲了讓箱子只顯示一次,我必須做些什麼? –

+0

查看觸摸事件的內容並篩選一些操作。或在第一次觸摸事件 – njzk2

回答

6

問題是,觸摸事件檢測到比您想要的更多的交互。它檢測到新聞和釋放,所以它被稱爲兩次。要檢測只按你可以,如果(if(arg1.getAction(); == MotionEvent.ACTION_DOWN))使用檢查事件的類型,你touchListener:

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

     return false; 
    } 
}); 

如果你想有一個簡單的解決方案,你可以取代你onTouchListeneronClickListener

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

如果你想忽略鍵盤嘗試使用this question禁用:

而不是設置setOnTouchListener(new OnTouchListener()的和壓倒一切的public boolean onTouch(View arg0, MotionEvent arg1)通過更換這兩個行代碼。

+0

它的工作,ive改變它(if(event.getAction()== MotionEvent.ACTION_DOWN非常感謝你:D –

0

你必須使用onClickListener!

如果你把手指放在屏幕上並移動它,你會看到幾個盒子出現在你手指的每個新位置。

+0

它的工作,但我必須點擊edittext兩次,因爲第一次當我點擊框,虛擬鍵盤彈出,並且第二次點擊時,對話框出現,你知道我可以如何使框出現在第一次點擊? –

+0

沒有注意到我正在添加一個答案和一個存在的答案(10分鐘前?:/ meh ...) 無論如何,編輯我的答案,所以你可以有一個鍵盤的解決方案。 –