#java #android
#java #Android
Вопрос:
У меня есть 7 флажков для каждого дня недели, объявленных следующим образом:
CheckView MondayTextBox;
CheckView TuesdayTextBox;
CheckView WednesdayTextBox;
...
А затем в oncreate они инициализируются следующим образом:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_add_alarm, container, false);
MondayTextBox = (CheckView) view.findViewById(R.id.mondayButton);
TuesdayTextBox = (CheckView) view.findViewById(R.id.tuesdayButton);
WednesdayTextBox = (CheckView) view.findViewById(R.id.wednesdayButton);
...
В прослушивателе onClick для каждого из этих флажков я установил альфа-значение выбранного флажка с анимацией на серый цвет, указывающий, что он не используется таким образом:
MondayTextBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectAndAnimateTheCheckBoxes(mondaySelected, MondayTextBox);
}
});
TuesdayTextBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectAndAnimateTheCheckBoxes(tuesdaySelected, TuesdayTextBox);
}
});
...
Который вызывает функцию selectAndAnimateTheCheckBoxes:
public void selectAndAnimateTheCheckBoxes(Boolean daySelected, CheckView dayTextBox) {
if (!daySelected) {
daySelected = true;
dayTextBox.animate().alpha(1F).setDuration(300);
} else {
daySelected = false;
dayTextBox.animate().alpha(0.3F).setDuration(300);
}
}
Возможно ли передать не только значение переменной, но и саму переменную через функцию? Или переменная должна быть явно указана и установлена аргументом функции.
P.s. Я знаю, как заставить эту функцию работать, я никогда даже не думал об этом раньше, и мне интересно, возможно ли это.
Заранее спасибо за вашу помощь.
Ответ №1:
Вы можете setOnCheckedChangeListener
установить свои флажки следующим образом
MondayTextBox.setOnCheckedChangeListener(this);
.
.
и переопределите метод
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()){
case R.id.mondayButton:
if(isChecked == true) {
Toast.makeText(this, "Checked", Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(this, "Unchecked", Toast.LENGTH_SHORT).show();
}
break;
}
}
Комментарии:
1. Хорошо, спасибо, поэтому нет практического способа сделать это только для каждого случая. Спасибо
Ответ №2:
Вы можете сделать следующее :
public class MainActivity extends Activity implements OnClickListener{
CheckView MondayTextBox;
CheckView TuesdayTextBox;
CheckView WednesdayTextBox;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_alarm, container, false);
MondayTextBox = (CheckView) view.findViewById(R.id.mondayButton);
TuesdayTextBox = (CheckView) view.findViewById(R.id.tuesdayButton);
WednesdayTextBox = (CheckView) view.findViewById(R.id.wednesdayButton);
...
MondayTextBox.setOnClickListener(this);
TuesdayTextBox.setOnClickListener(this);
WednesdayTextBox.setOnClickListener(this);
...
}
@Override
public void onClick(View v) {
switch (v) {
case MondayTextBox :
selectAndAnimateTheCheckBoxes(mondaySelected, MondayTextBox);
break;
case TuesdayTextBox:
selectAndAnimateTheCheckBoxes(tuesdaySelected, TuesdayTextBox);
break;
...
}
}
}
Комментарии:
1. Спасибо, Айан, но это просто еще один способ выполнения onClick, который ничем не отличается от неисправного кода, который я показывал ранее. Хотя спасибо.
2. Проверьте мой другой ответ @NicholasMuir
Ответ №3:
Вероятно, это то, что вы ищете:
CheckView chk[];
Boolean daySelected[];
chk=new CheckView [7];
daySelected=new daySelected[7];
chk[0]=(CheckView) view.findViewById(R.id.mondayButton);
chk[1]=(CheckView) view.findViewById(R.id.tuesdayButton);
...
for (int i = 0; i < 7; i ) {
chk[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectAndAnimateTheCheckBoxes(daySelected[i], chk[i]);
}
});
}