0

EditText ビューと checkBox (非表示)、および 2 つの radioButton (非表示と表示) があります。ボタンとチェックボックスの機能は、EditView へのヒントを非表示または表示することです。最初の質問は、そもそもなぜこれをやりたいのかということだと思います。まあ、私はアンドロイドにまったく慣れていないので、さまざまなことを試しています。

ただし、コードを実行すると、アクティビティの起動に失敗します。ラジオボタンを配置する前にプログラムをテストしましたが、プログラムのチェックボックスだけで問題なく動作していました。したがって、問題はラジオ ボタンのどこかにあるか、または同じタスクに使用される両方の組み合わせにあると思います。

ここに私のコードがあります:

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.

このエラーは何を意味し、どうすれば修正できますか?

4

1 に答える 1

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その親ビューの子です。ここで、それらを親から削除せずに、新しく作成されたビューに追加します。コードで RadioGroup を作成するのではなく、レイアウト 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>
于 2013-09-13T06:42:54.703 に答える