我已经制作了一个自定义的EditText,这样我就可以覆盖当屏幕上有键盘时按下后退键时会发生什么。 (Based on an answer to this linked question)
按下后退键时我想做的是四件事:设置布尔值,更改自定义EditText的文本,更改按钮的文本,以及更改TextView的可见性。所有这四个都在不同的文件中(我认为可能是导致问题的原因)。但我可以找到它们,并在不崩溃的情况下调整其中两个。
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而崩溃。我想知道这是因为它无法找到Button或TextView,但它可以找到NiceEditText并更改它。
问:如何更改按钮的文字和TextView的可见性?
答案 0 :(得分:0)
// niceButton.setText(R.string.addItem);
此行是导致NullPointerException
错误的原因。将其更改为:
niceButton.setText(getResources().getString (R.string.addItem));
答案 1 :(得分:0)
我必须像这样设置一个活动变量:
Button niceButton = (Button) activity.findViewById(R.id.niceButton);
TextView addingTitle = (TextView) activity.findViewById(R.id.addingTitle);
在实际活动的onCreate中调用了哪个。然后在onKeyPreIme中我必须像这样调用getViewByIds:
NiceEditText editItem = (NiceEditText) findViewById(R.id.editItem);
它现在不再触发NullPointer并且有效!
出于某种原因,{{1}}无需调用活动就可以正常工作。