Java Android-使用自定义onKeyPreIme(backpress)更改按钮文本和文本视图可见性
我制作了一个自定义的EditText,这样我就可以覆盖当屏幕上有键盘时按下back键时发生的情况。() 当按下back键时,我想做四件事:设置布尔值、更改自定义EditText的文本、更改按钮的文本以及更改TextView的可见性。所有这四个文件都在不同的文件中(我相信这可能是导致问题的原因)。但我可以找到它们,并调整其中两个而不会崩溃Java Android-使用自定义onKeyPreIme(backpress)更改按钮文本和文本视图可见性,java,android,Java,Android,我制作了一个自定义的EditText,这样我就可以覆盖当屏幕上有键盘时按下back键时发生的情况。() 当按下back键时,我想做四件事:设置布尔值、更改自定义EditText的文本、更改按钮的文本以及更改TextView的可见性。所有这四个文件都在不同的文件中(我相信这可能是导致问题的原因)。但我可以找到它们,并调整其中两个而不会崩溃 public class NiceEditText extends EditText { Context context; public Ni
public class NiceEditText extends EditText {
Context context;
public NiceEditText(Context contx, AttributeSet attrs){
super(contx,attrs);
this.context = contx;
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (ListActivity.addedTitle) ListActivity.addedTitle = false;
NiceEditText editItem = (NiceEditText) findViewById(R.id.editItem);
editItem.setText("");
Button niceButton = (Button) findViewById(R.id.niceButton);
// niceButton.setText(R.string.addItem);
TextView addingTitle = (TextView) findViewById(R.id.addingTitle);
// addingTitle.setVisibility(View.INVISIBLE);
}
return super.onKeyPreIme(keyCode, event);
}
}
这两行注释导致应用程序因NullPointerException而崩溃。我想知道这是否是因为它既找不到按钮也找不到文本视图,但它可以找到文本并对其进行更改
Q:如何更改按钮的文本和文本视图的可见性?
// niceButton.setText(R.string.addItem);
这一行是导致NullPointerException
错误的原因。将其更改为:
niceButton.setText(getResources().getString (R.string.addItem));
我必须像这样设置一个活动变量:
public void setActivity(Activity a){
this.activity = a;
}
Button niceButton = (Button) activity.findViewById(R.id.niceButton);
TextView addingTitle = (TextView) activity.findViewById(R.id.addingTitle);
这是在实际活动的onCreate中调用的。然后在onKeyPreIme中,我必须像这样调用getViewById:
public void setActivity(Activity a){
this.activity = a;
}
Button niceButton = (Button) activity.findViewById(R.id.niceButton);
TextView addingTitle = (TextView) activity.findViewById(R.id.addingTitle);
它现在不再触发空指针并工作
然而,出于某种原因,NiceEditText editItem=(NiceEditText)findViewById(R.id.editItem)代码>不必在活动中调用即可工作