我有两个单选按钮,即通话和电子邮件。选择呼叫后,编辑框应启用,然后用户可以输入手机号码。 我查过这些链接: Enable a text box only when 1 of the radio button is clicked
Enable text box based on radio button selected
但我无法完成这项任务。
这是我的代码:
<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);
}
答案 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);
}
谢谢:)