Java 安卓:点击多个复选框
我想显示已选中的多个复选框的名称。问题是,当我检查其中任何一个时,只有最后一个检查结果会写入textview。我如何解决这个问题 我真的不明白如何连接这些复选框的名称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()){
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的答案。这应该行得通: