2015-09-22 39 views
-1

我製作了自定義EditText,以便可以覆蓋在屏幕上有鍵盤時按下後退鍵時會發生的情況。 (Based on an answer to this linked questionAndroid - 使用自定義onKeyPreIme(背壓)更改按鈕文本和TextView可見性

我想按下返回鍵時做的是四兩件事:設置一個布爾值,更改自定義的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並將其更改。

問:如何更改Button的文本和TextView的可見性?

回答

0

我必須設置一個活動的變量是這樣的:

public void setActivity(Activity a){ 
    this.activity = a; 
} 

這是所謂的實際活動的onCreate。然後在onKeyPreIme我只好打電話給getViewByIds這樣的:

Button niceButton = (Button) activity.findViewById(R.id.niceButton); 
TextView addingTitle = (TextView) activity.findViewById(R.id.addingTitle); 
現在

它不再觸發一個空指針和作品!

由於某些原因,NiceEditText editItem = (NiceEditText) findViewById(R.id.editItem);的作品無需在活動中調用。

0
// niceButton.setText(R.string.addItem); 

這行是什麼導致NullPointerException錯誤。將其更改爲:

niceButton.setText(getResources().getString (R.string.addItem)); 
相關問題