ANDROID:单击多个复选框

时间:2014-05-01 13:58:58

标签: java android

我想显示已选中的多个复选框的名称。问题是当我检查它们中的任何一个时,只有最后一个检查被写在textview上。我该如何解决这个问题?

我真的不明白如何连接这些复选框的名称。

    public void ChkCommand(View v)
{
    txtans = (EditText)findViewById(R.id.txtcon1);

    if(v.getId() == R.id.chk1 && ((CheckBox)v).isChecked()){
        chkClick = (CheckBox) findViewById(R.id.chk1);
    }
    else if(v.getId() == R.id.chk2 && ((CheckBox)v).isChecked()){
        chkClick = (CheckBox) findViewById(R.id.chk2);
    }
    else if(v.getId() == R.id.chk3 && ((CheckBox)v).isChecked()){
        chkClick = (CheckBox) findViewById(R.id.chk3);
    }

    String value = chkClick.getText().toString();
    txtans.setText(value);

}

public void CloseConF(View v)
{
    Intent intent = new Intent(this, SampComponents.class);
    startActivity(intent);
    finish();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.con_chk_samp, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_con_chk_samp,
                container, false);
        return rootView;
    }
}

}

4 个答案:

答案 0 :(得分:3)

每次要显示所有三个复选框的状态时,都必须检查所有三个复选框:

String value = "";
if (((CheckBox) findViewById(R.id.chk1)).isChecked()) {
    value += (CheckBox) findViewById(R.id.chk1).getText().toString();
}
if (((CheckBox) findViewById(R.id.chk2)).isChecked()) {
    value += (CheckBox) findViewById(R.id.chk2).getText().toString();
}
if (((CheckBox) findViewById(R.id.chk3)).isChecked()) {
    value += (CheckBox) findViewById(R.id.chk3).getText().toString();
}

txtans = (EditText)findViewById(R.id.txtcon1);
txtans.setText(value);

然后当然会有一些重构可以让事情更清洁,但这应该让你开始。

答案 1 :(得分:1)

value设为字段

private String value = "";

然后改变

String value = chkClick.getText().toString();

以某种方式:

value = value + " / " + chkClick.getText().toString();

但是还需要调整一下从复选框中读取状态的逻辑,否则他们也会在取消选中时添加文本。

答案 2 :(得分:1)

尝试在每个if中获取复选框文本并附加到像这样的字符串值。 chkBox1,chkBox2和chkBox3将是你java类中的CheckBoxes。

public void ChkCommand(View v)
{
    String value="";
    txtans = (EditText)findViewById(R.id.txtcon1);

    if(chkBox1.isChecked())
    {
        /*((CheckBox) findViewById(R.id.chk3)).setChecked(false);
        ((CheckBox) findViewById(R.id.chk2)).setChecked(false);*/
        chkClick = (CheckBox) findViewById(R.id.chk1);
        value += chkClick.getText().toString()+", ";

    }
    if(chkBox2.isChecked())
    {
        /*((CheckBox) findViewById(R.id.chk1)).setChecked(false);
        ((CheckBox) findViewById(R.id.chk3)).setChecked(false);*/
        chkClick = (CheckBox) findViewById(R.id.chk2);
        value += chkClick.getText().toString()+", ";
    }
    if(chkBox3.isChecked())
    {/*
        ((CheckBox) findViewById(R.id.chk1)).setChecked(false);
        ((CheckBox) findViewById(R.id.chk2)).setChecked(false);*/
        chkClick = (CheckBox) findViewById(R.id.chk3);
        value += chkClick.getText().toString();
    }

    txtans.setText(value);
}

因此,您将获得所有选中复选框的结果'文本。希望这会有所帮助。

P.S:我刚刚从@ njzk2评论中意识到,您需要将else if更改为if才能获得所有复选框的状态。

答案 3 :(得分:0)

声明StringBuffer或StringBuilder成员变量

StringBuffer buff = new StringBuffer();

试试这个

 buff.append(chkClick.getText().toString()+" ");  
            txtans.setText(buff.toString());

取代

String value = chkClick.getText().toString();
           txtans.setText(value);

如果您的复选框检查操作正常工作,它应该有效