2016-10-04 2 views
1

У меня есть 7 флажков на каждый день недели объявлен как это:Java: Установите несколько переменных через один аргумент функции

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. Я знаю, как заставить эту функцию работать, я даже не думал об этом раньше, и мне интересно, возможно ли это.

Заранее за вашу помощь.

ответ

2

Вы можете 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; 
     } 

     } 
+0

Хорошо спасибо, поэтому нет практического способа сделать это, как раз для каждого случая. Спасибо –

0

Вы можете сделать следующее:

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

    } 

    } 
} 
+0

Спасибо Ayan, но это просто еще один способ сделать onClick и не будет отличаться от неисправного кода, который я показывал раньше. Спасибо хоть. –

+0

Проверьте мой другой ответ @NicholasMuir – Ayan

0

Это, вероятно, то, что вы ищете для:

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