2012-09-26 8 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에 대한 대체 할 수 있습니다합니다. 당신이 키보드는 this question를 사용하지 않도록하려고 무시하려면

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

:

대신 setOnTouchListener(new OnTouchListener()을 설정

및 최우선 public boolean onTouch(View arg0, MotionEvent arg1)에 의해 코드의 두 라인을 교체합니다.

+0

작동했습니다. (if (event.getAction() == MotionEvent.ACTION_DOWN 감사드립니다. D –

0

당신은 onClickListener!

손가락을 화면에 대고 움직이면 손가락의 새로운 위치마다 여러 상자가 나타납니다.

+0

문제는 두 번 클릭해야합니다. 처음으로 상자를 클릭하면 가상 키보드 팝업이 나타나기 때문에 두 번 클릭해야합니다. 두 번 클릭하면 대화 상자가 나타납니다. 상자를 처음 클릭하면 어떻게 나타나게 할 수 있습니까? –

+0

알지 못함 기존 답변 (10 분 전 :/meh ...)을 사용하여 답변을 추가하려고하지 않았습니다. 어쨌든 내 대답을 편집 했으므로 키보드에 대한 해결책을 찾을 수 있습니다. –

관련 문제