2014-11-06 2 views
1

버튼 사이를 클릭하면 텍스트 뷰가 업데이트되도록 라디오 버튼과 같은 토글 버튼을 설정하려고합니다. 그리고 내 textview 측면에있는 플러스 또는 마이너스 버튼을 클릭하면 버튼이 텍스트 뷰와 함께 업데이트됩니다.토글 버튼이 동시에 텍스트 뷰를 변경합니다.

표시 할 버그가있는 비디오가 있습니다. 수행하려는 작업을 반영하여 https://www.dropbox.com/s/cfx2r3t3umhgc4p/VIDEO0048.mp4?dl=0입니다.

내가 아래 뭐하는 거지에 대한 두 가지 질문이 있습니다

1) 내가 생각하는 내 논리가 결함이 여기에 루프 :이 메이크업 감각을합니까? :

// **Loop through this group then for each child, set your listener 
        for (int i = 0; i < group.getChildCount(); ++i) { 
         View child = group.getChildAt(i); 
         child.setOnClickListener(createClickListener(i)); 
        } 

2) 어떻게이 코드를보다 명확하게 만들 수 있습니까? 어떻게 리팩토링 할 수 있습니까?

//onClickListener method that returns an interface 
private View.OnClickListener createClickListener(final int value) { 
    return new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      buttonValue = value; 
      buttonState = true; 

      ToggleButton clickedButton = (ToggleButton) view; 
      RadioGroup radioGroup= (RadioGroup) clickedButton.getParent(); 

      if (clickedButton.isChecked()) { 
       System.out.println("Button Value: " + Integer.toString(buttonValue)); 
       num.setText(Integer.toString(buttonValue)); 
       System.out.println(buttonState); 
      } else { 
       // The toggle is disabled 
       System.out.println(buttonState); 
       System.out.println("Is this called?"); 
      } 
      System.out.println("Check changed listener called"); 


      for (int i = 0; i < radioGroup.getChildCount(); ++i) { 
       View nextChild = radioGroup.getChildAt(i); 
       if (!(nextChild instanceof ToggleButton)) { 
        continue; 
       } 
       if (nextChild.getId() != clickedButton.getId() || !clickedButton.isChecked()) { 
        ToggleButton tb2 = (ToggleButton) nextChild; 
        tb2.setChecked(false); 
       } 
      } 
     } 

    }; 
} 

      @Override 
      public Object instantiateItem(ViewGroup parent, final int position) { 

       //Get the inflater 
       LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

       //inflate the root layout 
       View view = inflater.inflate(R.layout.collection, null); 

       final int[] counter = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
       num = (TextView) view.findViewById(R.id.num); 
       num.setText(Integer.toString(counter[0])); 

       //scores toggle buttons 
       zero = (ToggleButton) view.findViewById(R.id.number_zero); 
       one = (ToggleButton) view.findViewById(R.id.number_one); 
       two = (ToggleButton) view.findViewById(R.id.number_two); 
       three = (ToggleButton) view.findViewById(R.id.number_three); 
       four = (ToggleButton) view.findViewById(R.id.number_four); 
       five = (ToggleButton) view.findViewById(R.id.number_five); 
       six = (ToggleButton) view.findViewById(R.id.number_six); 
       seven = (ToggleButton) view.findViewById(R.id.number_seven); 
       eight = (ToggleButton) view.findViewById(R.id.number_eight); 
       nine = (ToggleButton) view.findViewById(R.id.number_nine); 
       ten = (ToggleButton) view.findViewById(R.id.number_ten); 


       final ViewGroup group = (ViewGroup) view.findViewById(R.id.toggleGroup); 

       // **Loop through this group then for each child, set your listener 
       for (int i = 0; i < group.getChildCount(); ++i) { 
        View child = group.getChildAt(i); 
        child.setOnClickListener(createClickListener(i)); 
       } 

       final ImageView plus_button = (ImageView) view.findViewById(R.id.plus_sign); 
       final ImageView minus_button = (ImageView) view.findViewById(R.id.minus_sign); 

       zero.setOnClickListener(createClickListener(0)); 
       one.setOnClickListener(createClickListener(1)); 
       two.setOnClickListener(createClickListener(2)); 
       three.setOnClickListener(createClickListener(3)); 
       four.setOnClickListener(createClickListener(4)); 
       five.setOnClickListener(createClickListener(5)); 
       six.setOnClickListener(createClickListener(6)); 
       seven.setOnClickListener(createClickListener(7)); 
       eight.setOnClickListener(createClickListener(8)); 
       nine.setOnClickListener(createClickListener(9)); 
       ten.setOnClickListener(createClickListener(10)); 

       plus_button.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 

         if (plus_button.isPressed()) { 

          if ((counter[0] <= 9) && (counter[0] >= 0)) { 

           counter[0]++; 
           num.setText(Integer.toString(counter[0])); 
           buttonValue = Integer.parseInt(num.getText().toString()); 
           for (int i = 0; i < group.getChildCount(); ++i) { 
            View nextChild = group.getChildAt(i); 
            ToggleButton tb2 = (ToggleButton) nextChild; 
            if (i == buttonValue) { 
             tb2.setChecked(true); 
            } else { 
             tb2.setChecked(false); 
            } 
           } 
           System.out.println(num.getText().toString()); 
          } 
         } 
        } 
       }); 

       minus_button.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 

         if (minus_button.isPressed()) { 

          if ((counter[0] <= 10) && (counter[0] > 0)) { 
           counter[0]--; 
           num.setText(Integer.toString(counter[0])); 
           buttonValue = Integer.parseInt(num.getText().toString()); 
           for (int i = 0; i < group.getChildCount(); ++i) { 
            View nextChild = group.getChildAt(i); 
            ToggleButton tb2 = (ToggleButton) nextChild; 
            if (i == buttonValue) { 
             tb2.setChecked(true); 
            } else { 
             tb2.setChecked(false); 
            } 
           } 
           System.out.println(num.getText().toString()); 
          } 
         } 
        } 
       }); 
+0

루프에서 onClickListener에 코드가 있습니까? 그렇지 않은 경우 클릭을 수신하지만 아무 것도하지 않거나 정확합니까? – Lukos

+0

예, onclick 수신기가 위에 있습니다. 너는 그것을 보느냐? –

답변

-1

Android doc for the ToggleButton을보십시오. 특히 OnCheckedChangeListener에 관한 바닥의 부분은 당신에게 흥미로울 것입니다.

+0

나는 거의 정확하게 그랬다. 내가하고있는 일과 내가 잘못한 일을 살펴볼 수 있니? –

+0

아니야. 모든 자식을 반복하고'OnClickListeners'를 추가합니다. 예제는'OnCheckedChangeListener'를 사용합니다 – SimonSays

+0

각 ToggleButton/TextView 조합에 대해 하나의'OnCheckedChangeListener'를 생성 할 수 있습니다. 그렇게하면 이벤트가 발생했을 때 그들을 들여다 볼 필요가 없습니다. – SimonSays

관련 문제