gpt4 book ai didi

java - 如何进行设置,以便在单击按钮时,数字选择器中的值会发生变化,反之亦然?

转载 作者:行者123 更新时间:2023-12-01 12:20:08 26 4
gpt4 key购买 nike

我希望能够检查我当前设置的十一个按钮之一,并在我制作的自定义数字选择器中更新按钮的值,反之亦然。因此,如果我在数字选择器中选择一个数字,我希望按下/单击该按钮以获得相同的值。

我正在寻找最好/最合理的方法。我在想也许我是否可以将所有内容都放在 if-else 语句中,但我不确定这会如何工作。

这是我到目前为止的代码:

 int buttonValue = 0;

//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;

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

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) {

final int delPosition = 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);

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

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

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

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

plus_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view, final int value) {

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

}
});

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

parent.addView(view, 0);
return view;
}

这是 xml 文件的一部分:

//Custom number picker


<ImageView
android:id="@+id/minus_sign"
android:src="@drawable/minus"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_row="0"
android:layout_column="0"
/>

<TextView
android:id="@+id/num"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="1"
android:layout_row="0"
/>

<ImageView

android:id="@+id/plus_sign"
android:src="@drawable/plus"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_row="0"
android:layout_column="2"
/>


//The buttons are toggle buttons inside a radiogroup

<RadioGroup>

<ToggleButton

android:id="@+id/number_zero"
android:layout_width="25sp"
android:layout_height="35sp"
android:textOn="@string/number_zero"
android:textOff="@string/number_zero"
android:background="@drawable/number_color"
/>

<ToggleButton
android:id="@+id/number_one"
android:layout_width="25sp"
android:layout_height="35sp"
android:textOn="@string/number_one"
android:textOff="@string/number_one"
android:background="@drawable/number_color"
/>
</RadioGroup>

最佳答案

对于切换按钮集合,请使用 LinearLayoutRelativeLayout 或任何其他可以转换为 ViewGroup 的类型。然后,在膨胀 View 后,将其转换为 ViewGroup ,然后使用 view.getChildAt(i) 获取相应的 ToggleButton 。比通过 id 查找所有按钮更好,不是吗?

这与您对单选按钮所做的类似。

--

  int buttonValue = 0;

//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;

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

// **Change your TextView here
...

// **Keep these since you still want to update all buttons
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) {

final int delPosition = 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);

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

// **Give your RadioGroup an id so that you can find it here
ViewGroup group = view.findViewById(...);
// **Loop through this group then for each child, set your listener
for (...){
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);


plus_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view, final int value) {

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());
// **Use the loop here again to update all buttons
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);}
}
}
}

}
});

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());
// **Use the loop here again to update all buttons
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);}
}
}
}
}
});

parent.addView(view, 0);
return view;
}

--

您运行循环来设置 xml 中此 RadioGroup 上的点击监听器。不要在整个 xml 上运行循环

<RadioGroup>

<ToggleButton

android:id="@+id/number_zero"
android:layout_width="25sp"
android:layout_height="35sp"
android:textOn="@string/number_zero"
android:textOff="@string/number_zero"
android:background="@drawable/number_color"
/>

<ToggleButton
android:id="@+id/number_one"
android:layout_width="25sp"
android:layout_height="35sp"
android:textOn="@string/number_one"
android:textOff="@string/number_one"
android:background="@drawable/number_color"
/>
</RadioGroup>

关于java - 如何进行设置,以便在单击按钮时,数字选择器中的值会发生变化,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26726364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com