我在xml中创建了一个隐藏的按钮,我希望在我的EditText中创建某个字符串值时再次显示该按钮。我在使用if语句满足值时使用了TextWatcher检查。但是,当显示按钮的代码被执行时,应用程序崩溃说textwatcher停止工作。我对android的开发很新,所以可能是我搞砸了。
这是我的代码:
public class MainActivity extends AppCompatActivity
{
private EditText UserInput;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.button);
UserInput = (EditText) findViewById(R.id.UserInput);
UserInput.addTextChangedListener(watch);
}
TextWatcher watch = new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().equals("teststring") ){
//program crashes when it reaches this part
button.setVisibility(View.VISIBLE);
}
else
{
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
}
答案 0 :(得分:1)
您已在此处将Button
定义为全局变量:
private Button button;
但是当你在onCreate
方法中定义视图时,你定义了一个本地变量Button
并实例化它,在这里:
Button button = (Button)findViewById(R.id.button);
稍后当您在setVisibility
上致电Button
时,您在全局变量上调用此方法,而该变量未实例化。
要解决此问题,只需更改您的onCreate
方法:
button = (Button)findViewById(R.id.button);
因此全局变量得到实例化。
答案 1 :(得分:0)
更改此行
Button button = (Button)findViewById(R.id.button);
到
button = (Button)findViewById(R.id.button);
使类成员按钮初始化