2016-10-04 89 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]); 
     } 
    }); 
} 
相关问题