简体   繁体   English

听众的麻烦

[英]Trouble with Listeners

I am trying to learn how listeners work in Android. 我正在尝试学习侦听器在Android中的工作方式。 For this I made a simple app with 2 activities where the mainactivity 'listens to' the second activity. 为此,我制作了一个具有2个活动的简单应用,其中mainactivity“侦听”第二个活动。 The app crashes. 该应用程序崩溃。

Since the entire app is pretty small, I am going to post the entire thing here along with the logcat. 由于整个应用程序很小,因此我将把整个内容与logcat一起发布在这里。

My question is: what am I doing wrong and how do I get it to work. 我的问题是:我做错了什么以及如何使它正常工作。

The MainActivity:(this listens to the Listen activity) MainActivity :(它侦听Listen活动)

public class MainActivity extends Activity implements Listen.Listener {

Listen l;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

            l = new Listen();
    l.setListener(this);

}


public void onButton(final View v)
{
    Intent i = new Intent(this, Listen.class);
    startActivity(i);
}

@Override
public void withoutMessage()
{
    Toast.makeText(this, "click received in the main activity class", Toast.LENGTH_SHORT).show();
}

} }

The Listen activity: 聆听活动:

public class Listen extends Activity {

  public interface Listener {
      public void withoutMessage();

  }

  Listener listner = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listen);


}

 public void setListener(Listener l) {
     listner = l;
    }

public void onButton(final View v)
{
    Log.w("Rakshak", "button click");
    Toast.makeText(this, "button clicked from the the Listen class", Toast.LENGTH_SHORT).show();
    listner.withoutMessage();

}

}

The LogCat: LogCat:

05-30 11:20:50.764: E/AndroidRuntime(4726): FATAL EXCEPTION: main
05-30 11:20:50.764: E/AndroidRuntime(4726): java.lang.IllegalStateException: Could not execute method of the activity
05-30 11:20:50.764: E/AndroidRuntime(4726):     at android.view.View$1.onClick(View.java:3607)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at android.view.View.performClick(View.java:4212)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at android.view.View$PerformClick.run(View.java:17476)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at android.os.Handler.handleCallback(Handler.java:800)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at android.os.Handler.dispatchMessage(Handler.java:100)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at android.os.Looper.loop(Looper.java:194)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at android.app.ActivityThread.main(ActivityThread.java:5371)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at java.lang.reflect.Method.invokeNative(Native Method)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at java.lang.reflect.Method.invoke(Method.java:525)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at dalvik.system.NativeStart.main(Native Method)
05-30 11:20:50.764: E/AndroidRuntime(4726): Caused by: java.lang.reflect.InvocationTargetException
05-30 11:20:50.764: E/AndroidRuntime(4726):     at java.lang.reflect.Method.invokeNative(Native Method)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at java.lang.reflect.Method.invoke(Method.java:525)
05-30 11:20:50.764: E/AndroidRuntime(4726):     at  android.view.View$1.onClick(View.java:3602)
05-30 11:20:50.764: E/AndroidRuntime(4726):     ... 11 more
05-30 11:20:50.764: E/AndroidRuntime(4726): Caused by: java.lang.NullPointerException
05-30 11:20:50.764: E/AndroidRuntime(4726):     at com.example.listnertest.Listen.onButton(Listen.java:35)
05-30 11:20:50.764: E/AndroidRuntime(4726):     ... 14 more

This 这个

 l = new Listen();

is wrong since its a Activity class. 错误,因为它是一个Activity类。 Never instantiate a Activity class. 永远不要实例化一个Activity类。 Activity class is not a normal java class. 活动类不是普通的Java类。 It has a lifecycle and it is declared in manifest file. 它具有生命周期,并在清单文件中声明。

Your listner is null. 您的listner为空。

You cant just instantiante a Activity class.. thats the error come from.. it will return a null.. 您不能只实例化一个Activity类。多数民众赞成错误来自..它将返回null。

solution: 解:

just create a interface and instead of activity you can create a fragment.. which will listen to your main activity 只是创建一个界面,而不是活动,您可以创建一个片段..它将监听您的主要活动

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM