仅在选择单选按钮后启用编辑框

时间:2014-12-22 11:48:19

标签: android android-edittext radio-button

我有两个单选按钮,即通话和电子邮件。选择呼叫后,编辑框应启用,然后用户可以输入手机号码。 我查过这些链接: Enable a text box only when 1 of the radio button is clicked

Enable text box based on radio button selected

Making Text box not editable

但我无法完成这项任务。

这是我的代码:

     <LinearLayout 
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_marginRight="10dp"
     android:layout_marginLeft="10dp"
     android:layout_marginTop="10dp"  >

            <RadioGroup
            android:id="@+id/radioGroup1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:weightSum="2" 
            android:orientation="horizontal">

             <RadioButton
             android:id="@+id/radio0"
             android:layout_width="0dp"
             android:layout_height="wrap_content" 
             android:layout_weight="1"
             android:text="@string/call"/>

             <RadioButton
             android:id="@+id/radio1"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:text="@string/email"
             android:layout_weight="1" />
             </RadioGroup>
             </LinearLayout>

    <LinearLayout 
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_marginRight="10dp"
     android:layout_marginLeft="10dp"
     android:layout_marginTop="10dp"
     android:weightSum="1">

    <TextView
        android:id="@+id/textView21"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/mobile"
        android:textColor="#000000"
        android:textSize="15sp"
        android:layout_weight="0.3" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal"
        android:maxLength="10"
        android:layout_weight="0.7"
        android:inputType="none" />
    </LinearLayout> 

的.java

public class MainActivity extends Activity {
String mobile;

RadioGroup rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
EditText edit = (EditText) findViewById(R.id.editText1);

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    edit.setEnabled(false);
    edit.setInputType(InputType.TYPE_NULL);
    edit.setFocusable(false);

    rg1.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
            case R.id.radio0:   
                op1="call";
                actv(); 
                break;

            case R.id.radio1:
                op1="email";
                break;

            }   

        }
    });

    public void actv() {
    edit.setEnabled(true);
        edit.setInputType(InputType.TYPE_CLASS_TEXT);
        edit.setFocusable(true);
    }

4 个答案:

答案 0 :(得分:4)

除了纠正你的成员初始化(如前面每个答案中的建议),你需要修复你的布局(它太早关闭,导致xml无效)。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal"
        android:weightSum="2" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/call" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="true"
            android:text="@string/email" />
    </RadioGroup>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:weightSum="1" >

        <TextView
            android:id="@+id/textView21"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.3"
            android:text="@string/mobile"
            android:textColor="#000000"
            android:textSize="15sp" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.7"
            android:ems="10"
            android:maxLength="10" />
    </LinearLayout>

</LinearLayout>

还要确定您希望阻止用户输入edittext的方式(禁用/隐藏/输入类型调整)。

最后但并非最不重要的是,将所有这些整合在一起:

public class MainActivity extends Activity implements OnCheckedChangeListener
{
    private String op1;

    private RadioGroup rg1;
    private EditText edit;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
        rg1.setOnCheckedChangeListener(this);

        edit = (EditText) findViewById(R.id.editText1);
        actv(false);
    }

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId)
    {
        switch (checkedId)
        {
            case R.id.radio0:
                op1 = "call";
                actv(true);
                break;

            case R.id.radio1:
                op1 = "email";
                actv(false);
                break;
        }
    }

    private void actv(final boolean active)
    {
        edit.setEnabled(active);
        if (active)
        {
            edit.requestFocus();
        }
    }
}

答案 1 :(得分:0)

  @Zoya RadioGroup rg1 =(RadioGroup)findViewById(R.id.radioGroup1);   在onCreate方法之前包括这个@MagicalPhoenixϡ不工作   表示屏幕没有显示..这是我的第一个屏幕   我启动应用程序,它说“应用程序已停止   出乎意料地......请再试一次..“

它正在崩溃。

<强>原因:

RadioGroup rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
EditText edit = (EditText) findViewById(R.id.editText1);

您已在 onCreate方法之前添加了这些

显然这不起作用。

setContentView方法onCreate内进行{{1}}调用后添加。

希望它有所帮助。

答案 2 :(得分:0)

添加:

rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
edit = (EditText) findViewById(R.id.editText1);

后:

setContentView(R.layout.activity_main);
你的onCreate();

中的

还要确保在选中radio1时设置edit.setEditable(false)。

完整代码:

public class MainActivity extends Activity {
String mobile;

RadioGroup rg1 = null;
EditText edit = null;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
    edit = (EditText) findViewById(R.id.editText1);
    edit.setEnabled(false);
    edit.setInputType(InputType.TYPE_NULL);
    edit.setFocusable(false);

    rg1.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
            case R.id.radio0:   
                op1="call";
                enableEdit(true); 
                break;

            case R.id.radio1:
                op1="email";
                enableEdit(false); 
                break;

            }   

        }
    });
    }

    public void enableEdit(boolean state) {
        edit.setEnabled(state);
        edit.setFocusable(state);
        if(state){ edit.setInputType(InputType.TYPE_CLASS_TEXT); } 
        else { edit.setInputType(InputType.TYPE_NULL); }
    }
}

答案 3 :(得分:0)

这就是你需要做的事情

更改此

RadioGroup rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
EditText edit = (EditText) findViewById(R.id.editText1);

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

到这个

RadioGroup rg1 = null;
EditText edit = null;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
    edit = (EditText) findViewById(R.id.editText1);
}

谢谢:)