버튼 사이를 클릭하면 텍스트 뷰가 업데이트되도록 라디오 버튼과 같은 토글 버튼을 설정하려고합니다. 그리고 내 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());
}
}
}
});
루프에서 onClickListener에 코드가 있습니까? 그렇지 않은 경우 클릭을 수신하지만 아무 것도하지 않거나 정확합니까? – Lukos
예, onclick 수신기가 위에 있습니다. 너는 그것을 보느냐? –