2012-02-07 60 views
0

我在我的視圖上有一個EditText,我想設置一個onKeyListener。Android:在EditText上的setOnKeyListener

這裏是我的代碼:

final EditText edittext = (EditText) findViewById(R.id.editText1); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    edittext.setOnKeyListener(new EditText.OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

      return false; 
     } 
    }); 
} 

的問題是,我有這個問題,這裏是logcat的的誤差部分:

W/dalvikvm(3703): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
E/AndroidRuntime(3703): FATAL EXCEPTION: main 
E/AndroidRuntime(3703): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{milos.mdpi/milos.mdpi.MDPIActivity}: java.lang.NullPointerException 
E/AndroidRuntime(3703):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569) 
E/AndroidRuntime(3703):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
E/AndroidRuntime(3703):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
E/AndroidRuntime(3703):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
E/AndroidRuntime(3703):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(3703):  at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(3703):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
E/AndroidRuntime(3703):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(3703):  at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(3703):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
E/AndroidRuntime(3703):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
E/AndroidRuntime(3703):  at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(3703): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(3703):  at android.app.Activity.findViewById(Activity.java:1647) 
E/AndroidRuntime(3703):  at milos.mdpi.MDPIActivity.<init>(MDPIActivity.java:22) 
E/AndroidRuntime(3703):  at java.lang.Class.newInstanceImpl(Native Method) 
E/AndroidRuntime(3703):  at java.lang.Class.newInstance(Class.java:1409) 
E/AndroidRuntime(3703):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
E/AndroidRuntime(3703):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 
E/AndroidRuntime(3703):  ... 11 more 
+0

你得到NPE是因爲'findViewById()'返回null,因爲你在內容視圖設置之前調用它,所以'edittext'爲空 – Vladimir 2012-02-07 09:01:37

回答

6
private EditText edittext; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.<yourlayout>.xml); 
    edittext = (EditText) findViewById(R.id.editText1); 

    edittext.setOnKeyListener(new EditText.OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

      return false; 
     } 
    }); 
} 

如果問題仍然存在,並且您仍然得到NPE,那麼您的EditText在您的佈局xml中可能有其他ID。

+0

偉大的弗拉基米爾,問題是我有超過1個XML文件和視圖在哪裏編輯文本不是主要的。 – 2012-02-07 09:12:16

2

u需要寫

設置後ContentView setContentView(R.layout.main);

EditText edittext = (EditText) findViewById(R.id.editText1); 

in onCreate()而不是用於onCreate();

+0

+1,我只想添加'findViewById(R.id.editText1); '應該在​​'setContentView()' – Vladimir 2012-02-07 08:59:09

+0

後面調用謝謝你的回答@Riche,這不能解決我的問題......我仍然有同樣的問題。 – 2012-02-07 09:01:25

1

setContentView(R.layout.main);缺失

+0

謝謝,即使我使用setContentView(R.layout.main),我仍然有相同的錯誤。 – 2012-02-07 09:05:51

+0

看看本教程的開始,必須有你想念的事情:http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android- java/ – erdomester 2012-02-07 09:10:45