2014-11-16 2 views
0

Java 코드에 대한 일부 논리 문제로 인해 대화 상자가 표시됩니다. 사용자가 별 속도를 선택하면 이벤트가 발생했을 때 Android 프롬프트 대화 상자

ratingBar.setOnTouchListener(new OnTouchListener() 
    { 
     public boolean onTouch(View view, MotionEvent event) 
     { 
      float touchPositionX = event.getX(); 
      float width = ratingBar.getWidth(); 
      float starsf = (touchPositionX/width) * 5.0f; 
      starRate = (int)starsf + 1; 
      ratingBar.setRating(starRate); 
      promptSubmitStar(); 
      return true; 
     } 
    }); 

public void promptSubmitStar(){ 
    AlertDialog.Builder Dialog = new AlertDialog.Builder(getActivity()); 
    Dialog.setTitle("Confirm Rating"); 
    LayoutInflater li = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View dialogView = li.inflate(R.layout.option_submit_star, null); 
    txtPromptStarRate = (TextView) dialogView.findViewById(R.id.txtPromptStarRate); 
    txtPromptStarRate.setText("Confirm to submit " + starRate + " stars for this event?"); 
    Dialog.setView(dialogView); 
    Dialog.setPositiveButton("Ok", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, 
         int whichButton) {   
        dialog.dismiss(); 
       } 
      }); 

    Dialog.setNegativeButton("Cancel", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, 
         int whichButton) { 
        dialog.dismiss(); 
       } 
      }); 
    Dialog.show(); 
} 

그러나 이러한 코드와

가, 대화 상자를 두 번 메시지 : 그러니까 기본적으로 내 ratingBar이 onTouch 때, 나는 별 속도 및 프롬프트 대화 상자가 나타납니다. 어떤 부분이 그것을 일으키는 지 궁금합니다. 미리 감사드립니다.

+0

등급 등급은 무엇입니까? – Simas

+0

등급 표시 줄입니다. 나는 그것이 두 번 프롬프트가 될 것 인 지 궁금하다. –

답변

1

onTouch 리스너가 여러 번 호출 되었기 때문에 즉, 손가락이 화면 (ACTION_DOWN)에 올랐거나 손가락을 위로 움직이면 (ACTION_UP) 이는 때문입니다.

ratingBar.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
      float touchPositionX = event.getX(); 
      float width = ratingBar.getWidth(); 
      float starsf = (touchPositionX/width) * 5.0f; 
      starRate = (int) starsf + 1; 
      ratingBar.setRating(starRate); 
      promptSubmitStar(); 
     } 
     return true; 
    } 
}); 

난 당신이 비록 터치 리스너를 사용하는 거라고 왜 확실하지 않다 :

당신은 후자 화재 때 대화 상자를 표시 할. 다음과 같이 RatingBar 변경 사항을 청취 할 수 있습니다.

ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
    @Override 
    public void onRatingChanged(RatingBar bar, float rating, boolean user) { 
     promptSubmitStar(); 
    } 
}); 
+0

나의 평가 막대기가 매우 작기 때문에 나의 연구를 통하여, 나는 터치 청취자를 사용할 수 있었다라는 것을 알고있다 :) 많이 고맙다, 그것은 지금 해결된다! –

+0

그런데 사용자가 좋아요를 선택한 후에 등급 표시 줄을 사용 중지하는 방법에 대해 알고 싶습니까? ratingBar.setIndicator (true)로 시도했기 때문에 작동하지 않습니다. –

+0

@IWasSoLost 가장 먼저 떠오르는 것은 새로운 터치 리스너를 설정하는 것입니다. – Simas

관련 문제