Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:点击多个复选框_Java_Android - Fatal编程技术网

Java 安卓:点击多个复选框

Java 安卓:点击多个复选框,java,android,Java,Android,我想显示已选中的多个复选框的名称。问题是,当我检查其中任何一个时,只有最后一个检查结果会写入textview。我如何解决这个问题 我真的不明白如何连接这些复选框的名称 public void ChkCommand(View v) { txtans = (EditText)findViewById(R.id.txtcon1); if(v.getId() == R.id.chk1 && ((CheckBox)v).isChecked()){

我想显示已选中的多个复选框的名称。问题是,当我检查其中任何一个时,只有最后一个检查结果会写入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;
    }
}

}
将值设为字段

然后改变

String value = chkClick.getText().toString();
将某物改为:

value = value + " / " + chkClick.getText().toString();
但也有必要稍微调整一下从复选框中读取状态的逻辑,否则它们在取消选中时也会添加文本。

将值设为字段

然后改变

String value = chkClick.getText().toString();
将某物改为:

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

但也有必要稍微调整一下从复选框中读取状态的逻辑,否则它们在取消选中时也会添加文本。

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

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);
}
因此,您将获得所有选中复选框文本的结果。希望这有帮助


注:我刚刚从@njzk2的评论中意识到,为了获取所有复选框的状态,您需要将else if更改为if。

尝试在每个if-else中获取复选框文本,并将其附加到如下字符串值。chkBox1、chkBox2和chkBox3将是java类中的复选框

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);
}
因此,您将获得所有选中复选框文本的结果。希望这有帮助


注意:我刚从@njzk2的评论中意识到,为了获取所有复选框的状态,您需要将else if更改为if。

声明StringBuffer或StringBuilder成员变量

StringBuffer buff=新的StringBuffer

试试这个

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

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

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

声明StringBuffer或StringBuilder成员变量

StringBuffer buff=新的StringBuffer

试试这个

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

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

如果您的复选框检查操作正常,则应该可以使用该功能。每次您要显示所有三个复选框的状态时,必须同时选中这三个复选框:

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

当然,为了让事情变得更干净,还需要进行一些重构,但这应该让你开始了。

每次你想显示所有三个复选框的状态时,你必须选中所有三个复选框:

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

然后当然会进行一些重构以获得更干净的东西,但这应该可以让您开始。

您的ChkCommandv方法调用在哪里?使用oncheckedchangelister而不是您显然正在使用的安卓:onclick。首先,由于跨平台,在检查状态更改之前还是之后调用onclick并不一致。嘿,这里,它仍然不起作用>。这不是答案,而是关于您的代码的一般性评论ur ChkCommandv方法调用在哪里?使用onCheckedChangeListener而不是您显然正在使用的android:onclick。首先,由于跨平台,在选中状态更改之前还是之后调用onclick并不一致。嘿,它仍然不起作用>。这不是答案,而是关于代码的一般性评论是的@njzk2。密码里有什么我忽略的吗?是的。事实上,只有一个子句可以被验证,因此字符串的末尾只能有一个值。它仍然没有加起来,只显示最后一个复选框的名称selected@Taba你把别的if换成if了吗?如果条件允许,您确定您正在检查他们的状态吗?请在所有ifs中编写一个Sysout,并查看是否在控制台中看到它们。@Taba检查njzk2的答案。这应该行得通:是的@njzk2。密码里有什么我忽略的吗?是的。事实上,只有一个子句可以被验证,因此字符串的末尾只能有一个值。它仍然没有加起来,只显示最后一个复选框的名称selected@Taba你把别的if换成if了吗?如果条件允许,您确定您正在检查他们的状态吗?请在所有ifs中编写一个Sysout,并查看是否在控制台中看到它们。@Taba检查njzk2的答案。这应该行得通: