我真的想根据选中两个复选框的组合来设置布局。由于有四种可能的状态,我有四种布局可以显示复选框下方的项目(如果已选中)。我使用了四个类来完成这项工作,但必须有一种更有效的方法来实现这一目标。
基本上,我希望只有选中后才会在复选框下显示用户输入的下拉EditTexts。如果用注释的语句替换setContentView语句,我可以遍历任何复选框的组合,但是作为代码,只能进行一次布局更改,我不明白为什么。请帮助提出任何建议。
**我意识到这里没有使用CompoundButton对象。
public class First extends Activity implements OnCheckedChangeListener{
CheckBox emailBox,smsBox;
@Override public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_1);
emailBox=(CheckBox)findViewById(R.id.checkBox_1);
smsBox=(CheckBox)findViewById(R.id.checkBox_2);
emailBox.setOnCheckedChangeListener(this);
smsBox.setOnCheckedChangeListener(this);
}
public void onCheckedChanged(CompoundButton compound,boolean isChecked){
if(!emailBox.isChecked()&&!smsBox.isChecked()){
setContentView(R.layout.activity_1);
// Toast.makeText(First.this,"None Checked",Toast.LENGTH_SHORT).show();
}
if(emailBox.isChecked()&&!smsBox.isChecked()){
setContentView(R.layout.activity_2);
// Toast.makeText(First.this,"Email Checked",Toast.LENGTH_SHORT).show();
}
if(smsBox.isChecked()&&!emailBox.isChecked()){
setContentView(R.layout.activity_3);
// Toast.makeText(First.this,"Sms Checked",Toast.LENGTH_SHORT).show();
}
if(emailBox.isChecked()&&smsBox.isChecked()){
setContentView(R.layout.activity_4);
// Toast.makeText(First.this,"Both Checked",Toast.LENGTH_SHORT).show();
}
}
}
答案 0 :(得分:2)
更有效的方法是使用片段而不是更改布局:)左 OR
布局中的组控件并将其可见性设置为View.GONE然后为适当的组设置visiblility to View.Visible
答案 1 :(得分:1)
要显示一个下拉信息框(如文本视图),您可以在这两个复选框下放置一个空的标签(或者更确切地说是隐藏它)并检查复选框中的更改然后更改标签I前面提到的运行时使用java部分代码来显示你想要的东西。我希望我明白你的意思,这对你有帮助。
答案 2 :(得分:0)
我能够非常简单地通过将布局的相关部分包裹在垂直的LinearLayout中并在visibility ='之后切换来解决这个问题。和可见性='可见'如下面的代码所示;所以我最终认为我应该回到这里分享(如果有人有更简单,更有效的方法,也许让我知道?)
public class MainActivity extends Activity implements OnCheckedChangeListener{
CheckBox emailBox,smsBox;
LinearLayout portion_1,portion_2,portion_3;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
portion_1=(LinearLayout)findViewById(R.id.hider_1);
portion_2=(LinearLayout)findViewById(R.id.hider_2);
portion_3=(LinearLayout)findViewById(R.id.hider_3);
emailBox=(CheckBox)findViewById(R.id.checkBox_1);
smsBox=(CheckBox)findViewById(R.id.checkBox_2);
emailBox.setOnCheckedChangeListener(this);
smsBox.setOnCheckedChangeListener(this);
}
public void onCheckedChanged(CompoundButton compound,boolean isChecked){
if(!emailBox.isChecked()&&!smsBox.isChecked()){
portion_1.setVisibility(View.GONE);
portion_2.setVisibility(View.GONE);
portion_3.setVisibility(View.GONE);
emailBox.setChecked(false);
smsBox.setChecked(false);
}
if(emailBox.isChecked()&&!smsBox.isChecked()){
portion_1.setVisibility(View.VISIBLE);
portion_2.setVisibility(View.GONE);
portion_3.setVisibility(View.VISIBLE);
emailBox.setChecked(true);
smsBox.setChecked(false);
}
if(smsBox.isChecked()&&!emailBox.isChecked()){
portion_1.setVisibility(View.GONE);
portion_2.setVisibility(View.VISIBLE);
portion_3.setVisibility(View.VISIBLE);
emailBox.setChecked(false);
smsBox.setChecked(true);
}
if(emailBox.isChecked()&&smsBox.isChecked()){
portion_1.setVisibility(View.VISIBLE);
portion_2.setVisibility(View.VISIBLE);
portion_3.setVisibility(View.VISIBLE);
emailBox.setChecked(true);
smsBox.setChecked(true);
}
}
}