Я попытался использовать OnClickListener из другого класса, но почему-то это порождает мне ошибку. Может ли кто-нибудь помочь мне решить эту проблему?OnClickListener в отдельном классе не работает
Заранее спасибо.
public class TestClass extends Activity{
View.OnClickListener l = new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"Clicked", Toast.LENGTH_LONG).show();
}};}
Часть MainActivity:
@Override protected void onCreate(Bundle savedInstanceState) {
...
btnSpeech = (ImageButton) (findViewById(R.id.microphone));
obj=new TestClass();
btnSpeech.setOnClickListener(obj.l);
...
Ошибка:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.project/com.example.user.project.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at com.example.user.project.MainActivity.onCreate(MainActivity.java:74) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method)
Если эта трассировка стека для этого кода, то 'btnSpeech' имеет значение NULL. Кроме того, 'TestClass' и его слушатель не будут работать так, как вы ожидаете. Вы не можете создать экземпляр 'Activity' с' new' и работать корректно. Вместо этого вы можете удалить 'extends Activity' и заменить' getApplicationContext() 'на' v.getContext() '. Хотя, я не понимаю, почему вы просто не создаете слушателя в «MainActivity». –
Спасибо, но это не сработало, это снова дало мне NullPointerException. Я знаю, что вы можете сделать это легко в MainActivity, но я только хотел попробовать, можно ли запустить OnClickListener из отдельного класса, и я следил за множеством предложений из Интернета, но почему-то это не сработало для меня. – AndrIOS
Если текущая трассировка стека такая же, как вы указали выше, тогда 'btnSpeech' по-прежнему является нулевым. Однако вы не указали нам достаточно информации, чтобы определить, почему. –