Android - 使用自定义onKeyPreIme(backpress)更改Button文本和TextView可见性

时间:2015-09-22 23:26:51

标签: java android

我已经制作了一个自定义的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的可见性?

2 个答案:

答案 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}}无需调用活动就可以正常工作。