我有一个EditText视图和一个checkBox(隐藏),以及两个radioButtons(隐藏和显示)。按钮和复选框的功能是隐藏或显示EditView的hin。我想第一个问题是为什么我想首先要这样做。好吧,我对android很新,我只是尝试不同的东西。
当我运行代码时,Activity无法启动。我在放置任何单选按钮之前测试了程序,只有程序中的复选框才能正常工作。所以我假设问题在于单选按钮,或两者的组合用于同一任务。
这是我的代码:
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class EmPubLiteActivity extends Activity implements
CompoundButton.OnCheckedChangeListener {
CheckBox cb;
EditText et;
RadioButton rbHide;
RadioButton rbShow;
RadioGroup rg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cb = (CheckBox)findViewById(R.id.cbHideHint);
cb.setOnCheckedChangeListener(this);
et = (EditText)findViewById(R.id.editText1);
rbHide = (RadioButton)findViewById(R.id.rbHide);
rbShow = (RadioButton)findViewById(R.id.rbShow);
RadioGroup rg = new RadioGroup(this);
rg.addView(rbHide);
rg.addView(rbShow);
rbHide.setOnCheckedChangeListener(this);
rbShow.setOnCheckedChangeListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.em_pub_lite, menu);
return true;
}
@Override
public void onCheckedChanged(CompoundButton view, boolean isChecked) {
switch (view.getId()) {
case R.id.cbHideHint:
if (isChecked) {
et.setHint(R.string.nothing);
rbHide.setChecked(true);
}
else {
et.setHint(R.string.text_here);
rbShow.setChecked(true);
}
break;
case R.id.rbHide:
et.setHint(R.string.nothing);
cb.setChecked(false);
break;
case R.id.rbShow:
et.setHint(R.string.text_here);
cb.setChecked(true);
}
}
}
我收到了以下错误,以及其他一些错误,但我感觉这就是问题所在:
java.lang.IllegalStateException: the specified child already has a parent.
You must call removeView() on the child's parent first.
此错误意味着什么,我该如何解决?
答案 0 :(得分:1)
rbHide = (RadioButton)findViewById(R.id.rbHide);
rbShow = (RadioButton)findViewById(R.id.rbShow);
RadioGroup rg = new RadioGroup(this);
rg.addView(rbHide);
rg.addView(rbShow);
rbHide.setOnCheckedChangeListener(this);
rbShow.setOnCheckedChangeListener(this);
在布局xml中,rbHide
和rbShow
已经是其父视图的子级。现在,您可以将它们添加到新创建的视图中,而无需将其从父项中删除。您应该在布局xml中定义RadioGroup,而不是在代码中创建它们。它应该是这样的:
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkedButton="@+id/rbHide" >
<RadioButton
android:id="@+id/rbHide"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/rbShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RadioGroup>