我想显示已选中的多个复选框的名称。问题是当我检查它们中的任何一个时,只有最后一个检查被写在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;
}
}
}
答案 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);
如果您的复选框检查操作正常工作,它应该有效