如何使用一个活动的复选框设置不同的布局?

时间:2014-05-01 10:39:04

标签: android layout checkbox

我真的想根据选中两个复选框的组合来设置布局。由于有四种可能的状态,我有四种布局可以显示复选框下方的项目(如果已选中)。我使用了四个类来完成这项工作,但必须有一种更有效的方法来实现这一目标。

基本上,我希望只有选中后才会在复选框下显示用户输入的下拉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();
        }
    }
}

3 个答案:

答案 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);
        }
    }
}